谢邀。不懂android,也不懂OpenCL。但是我尝试了解了一下你的问题。

既然你用了第三方库,那就得查源码了。翻开ocl 库的源码搜android关键字,很容易定位到下面代码。

#https://github.com/cogciprocate/ocl/blob/master/ocl-interop/build.rs}elseiftarget.contains("android"){//androidletmutfile=File::create(&dest.join("egl_bindings.rs")).unwrap();Registry::new(Api::Egl,(1,4),Profile::Core,Fallbacks::All,[]).write_bindings(gl_generator::StaticGenerator,&mutfile).unwrap();println!("warning=Android support is untested! Use at your own risk, and please report any problems!");

build.rs这个文件里,看得出来它会在编译前先根据你的target判断出android,然后生成一个egl_bindings.rs文件,再往里写入一些内容。

这个过程依赖 gl_generator 库。再翻一下gl_generator库的源码,发现该库主要是用来动态生成一些OpenCL FFI的Rust绑定代码。比如android的话,就生成egl绑定 https://github.com/brendanzab/gl-rs/blob/master/gl_generator/generators/static_gen.rs

里面有人谈到ocl调用OpenCL驱动的机制:Here's how it works... OpenCL uses what's called an ICD loader which just stands for installable client driver loader. All that does is act as a front end and loads every driver listed in /etc/OpenCL/vendors (on Linux). It's what lets you choose between different platforms at runtime.

When you install any OpenCL drivers for any vendor, they will automatically install an ICD and it will be hooked up correctly. This is how you should leave things by default. Importantly, when using the ICD you have to link dynamically (which is what ocl does).

A side note if you're curious: a library or binary also has the option of linking directly to a driver statically. If you wanted to do that you or I would have to configure cl-sys properly before compiling for it to work though.

也就是说,在linux上面,ocl会去固定的一个目录去找 libOpenCL.so 。 但是他也说了,你也可以自己配置cl-sys来直接静态链接驱动。

由此,可以得出一个推论:这个libOpenCL.so动态库, 在特定的OS上面,位置是固定的。这个应该和语言无关。也就是说,不管是Rust语言还是其他语言,都应该去那个固定目录寻找so文件。这是在Linux上面。那么安卓肯定也一样(暂时不知道so文件默认放哪)。

也许,你碰到这个问题,也许只是安卓上面的OpenCL驱动没有弄好? 所以我专门搜了是不是有android开发者经常找不到opencl这个动态库。于是找到下面两个issues:

也许你可以照这俩issues寻找下答案。

也许你需要做个软链把so文件链到安卓的OpenCL驱动默认目录?(评论区有人对安卓软链的内容有相关补充)

希望对你有帮助。

configure 查找依赖库_Rust在编译Android的库时,如何设定依赖的第三方库引用的C/C++的动态库的搜索路径?...相关推荐

  1. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 三 | 等待远程函数执行完毕 | 寄存器获取返回值 )

    文章目录 前言 一.等待远程进程 mmap 函数执行完毕 二.从寄存器中获取进程返回值 三.博客资源 前言 前置博客 : [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | ...

  2. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )

    文章目录 一.准备 mmap 函数的参数 二.mmap 函数远程调用 一.准备 mmap 函数的参数 上一篇博客 [Android 逆向]Android 进程注入工具开发 ( 注入代码分析 | 远程调 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具收尾操作 | 关闭注入的动态库 | 恢复寄存器 | 脱离远程调试附着 )

    文章目录 一.dlclose 函数简介 二.关闭注入的 libbridge.so 动态库 三.恢复寄存器 四.脱离远程调试附着 一.dlclose 函数简介 dlclose 函数的作用是 卸载一个 指 ...

  4. 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 一 | mmap 函数简介 )

    文章目录 一.mmap 简介 二.mmap 函数作用 一.mmap 简介 mmap 函数的作用是 将 文件 映射到 内存中 , 映射的单位必须是 PAGE_SIZE ; mmap 函数引入头文件 : ...

  5. 结合xxx.cpp:(.text+0x55):对‘xxx’未定义的引用剖析Linux环境下动态库.so文件

    操作系统:Linux系统 场景:g++编译,连接动态库文件时 错误示例(中文): /tmp/cccgNNpb.o:在函数'main'中: test.cpp:(.text+0x55):对'myprint ...

  6. 【Android 安装包优化】动态库打包配置 ( “armeabi-v7a“, “arm64-v8a“, “x86“, “x86_64“ APK 打包 CPU 指令集配置 | NDK 完整配置参考 )

    文章目录 一.动态库打包配置 二.NDK 完整配置参考 三.参考资料 一.动态库打包配置 在 build.gradle 构建脚本中 , 配置 ndk 编译的动态库 CPU 架构类型 ; 在 " ...

  7. 【错误记录】Android Studio 导入外部 so 动态库报错 ( java.lang.UnsatisfiedLinkError | 指定 APK 打包动态库的 CPU 架构 )

    文章目录 一.报错信息 二.解决方案 ( 指定 APK 打包动态库的 CPU 架构 ) 一.报错信息 外部引用 so 动态库 , 如果只有一个 armeabi-v7a 的动态库 , 那么如果在 arm ...

  8. C#动态库封装(CH341\CP2112)

    总述 常见的设备在PC端都只提供C/C++的动态库,当需要使用C#调用时就需要进行封装一下,下面对CP2112/CH341提供的动态库进行封装. 封装操作 首先按一下模式将C/C++的动态库中的函数进 ...

  9. 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )

    文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...

最新文章

  1. nyoj985带通配符的数
  2. 阐述Linux操作系统之rpm五种基本操作
  3. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
  4. 算法训练营02-预备知识和时间复杂度分析
  5. 记住北京历史上的灾难
  6. Oracle EBS SLA取值
  7. 【maven】maven的介绍
  8. 项目如何开始:怎样和客户一起搞定需求
  9. 【文献翻译】基于CVSS的IT系统网络安全风险定量评估方法-A Quantitative CVSS-Based Cyber Security Risk Assessment Methodology
  10. android联想搜索不到wifi,联想笔记本ThinkPad E430 无法搜索到无线网络的解决办法...
  11. c语言大小写字母变换,C语言学习:任意大小写字母转换
  12. C语言中文网的资源的使用——链接索引
  13. 30万人追更,年度重磅Go图书出版,百万流量博主带你学习Go底层原理
  14. 打破思维断层之KMP分析 - wsc - ITeye技术网站
  15. Map基本介绍和Map方法
  16. 会计事务所审计、咨询等项目管理用泛微,数据关联、协作灵活
  17. 微信小程序MQTT模拟器 阿里云物联网平台测试
  18. 电气simulink常用模块_建筑电气制图图形符号之二,火灾自动报警符号,赶快收藏吧...
  19. 网络模拟工具Netem
  20. 快速做思维导图简单操作教程

热门文章

  1. 程序员都怎么过端午节?
  2. 数据库学习建议之提高数据库速度的十条建议
  3. linux 信号和信号量编程
  4. python笔试常见题
  5. 将一个数组拆分为若干个相等数组
  6. JAVA学习日志(7-1-继承)
  7. Lync Server 2010迁移至Lync Server 2013部署系列 Part18:开启Lync 2013 Mobility
  8. append()与extend()
  9. PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版
  10. .NET中的设计模式---由吃龙虾想到的