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

谢邀。不懂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驱动默认目录?(评论区有人对安卓软链的内容有相关补充)

希望对你有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/277496.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SprinBoot易学难精

Spring Boot易学难精 易学 组件自动装配:规约大于配置,专注核心业务外部化配置:一次构建、按需调配,到处运行嵌入式容器:内纸容器、无序部署、独立运行Spring Boot Stater:简化依赖、按需装配、自我包含Pro…

一道没人搞得定的趣味Shell编程游戏题!,看看你会不会?

1.1猜数字编程游戏首先让系统随机生成一个数字,给这个数字定一个范围(1-60),让用户输入猜的数字,对输入进行判断,如果不符合要求,就给予高或低的提示。其他要求:1、全部猜对后则给出…

java中拷贝文件的代码_拷贝文件夹中的所有文件到另外一个文件夹

[java]代码库/**** 拷贝文件夹中的所有文件到另外一个文件夹** param srcDirector* 源文件夹** param desDirector* 目标文件夹**/public static void copyFileWithDirector(String srcDirector,String desDirector) throws IOException {(new File(desDirector)).mkdirs();Fil…

数据库IN查询参数化改造的方法

// 批量查询的 2019-05-14 if (!string.IsNullOrWhiteSpace(Request["userCodes"])){string userCodes Request["userCodes"].Replace("\r", "").Replace(",", ",").Replace(" ", "&q…

Docker镜像构成和定制

Docker镜像构成和定制 利用 commit 理解镜像构成 docker commit 命令应用场合 docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被***后保存现场等。但是,不要使用 docker commit 定制镜像,定制镜像应该使用 Dockerfi…

孪生网络跟踪

github: https://github.com/foolwood/DaSiamRPN paper: https://arxiv.org/pdf/1808.06048.pdf http://openaccess.thecvf.com/content_cvpr_2018/papers/Li_High_Performance_Visual_CVPR_2018_paper.pdf转载于:https://www.cnblogs.com/heixialee/p/11064568.html

infoseccrypto_java下载_關於php接ICBC的支付接口的解決方案

一:背景: 目前項目使用的是php語言開發,需要接入中國工商銀行的ICBC的線上支付接口。二:遇到的問題:支付時需要對數據簽名,但是銀行那邊不提供php版本的程序,只有java版本的,以下是對…

AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系

Plugin for Gradle 和 Gradle 之间的版本对应关系 来源:https://developer.android.com/studio/releases/gradle-plugin.html Plugin versionRequired Gradle version1.0.0 - 1.1.32.2.1 - 2.31.2.0 - 1.3.12.2.1 - 2.91.5.02.2.1 - 2.132.0.0 - 2.1.22.10 - 2.132.…

java bean 工厂模式_深入理解Java的三种工厂模式

一、简单工厂模式简单工厂的定义:提供一个创建对象实例的功能,而无须关心其具体实现。被创建实例的类型可以是接口、抽象类,也可以是具体的类实现汽车接口public interfaceCar {String getName();}奔驰类public class Benz implementsCar {Ov…

java windows 取所有任务_Win下,通过Jstack截取Java进程中的堆栈信息

在Java软件的使用过程中,有时会莫名的出现奇怪的问题。而这些问题常常无法使用日志信息定位,这时我们就需要通过查看进程内部线程的堆栈调用关系来分析问题出在哪里。举个例子,当我们在做某个操作时,莫名的会弹出多个警告框&#…

docker mysql Exit 1

用laradock启动mysql时,state总是 Exit 1 ,docker-compose build后也没有效果 这时应该在~/.laradock/data(.env的DATA_PATH_HOST路径)下,把mysql的数据文件删除 这种情况常见于mysql安装多版本&#xff0c…

redis基础一_常用指令

# Redis configuration file example. # # Note that in order to read the configuration file, Redis must be # started with the file path as first argument: #./redis-server /path/to/redis.conf docker启动redis: docker run -d -p 6379:6379 -v /home/anmin/Desktop/…

滴滴Booster移动APP质量优化框架 学习之旅 三

推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源优化和无用资源优化进行了讨论。这里对不可编译无用assets资源优化进行讨论。 先看微信Matrix-ApkC…

java 最后的异常_java – 最后不要抛出堆栈溢出异常

Error不是例外.所以捕捉任何异常都不会捕获StackOverflowError.所以让我们先来看一下“明显的错误” – (这段代码不太适合这个答案后面的说明):catch(Throwable e){System.out.println("Catch");}如果您进行此更改,您将发现代码仍然不打印.但是它不会打印…

Colder框架硬核更新(Sharding+IOC)

目录 引言控制反转读写分离分库分表 理论基础设计目标现状调研设计思路实现之过五关斩六将 动态对象动态模型缓存数据源移植查询表达式树深度移植数据合并算法事务支持实际使用展望未来引言 前方硬核警告:全文干货11000字,请耐心阅读 遥想去年这个时候&a…

python:小心类实例的属性动态绑定机制

为什么80%的码农都做不了架构师?>>> class Test:def __init__(self):self.__keyinitdef get_key(self):return self.__keydef set_key(self,key):self.__keykeyif __name__ __main__:obj Test()print(obj.get_key())#输出初始值initobj.set_key(通过s…

java 获取手机归属地_java 获取手机归属地

java 获取手机归属地[2021-01-30 20:46:44] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:…

Atom常用功能插件

minimap代码缩略图插件 代码粒子效果activate-power-mode 代码格式化插件atom-beautify packages-->Atom Beautify-->Beautify进行格式化 标签折叠 autoclose-html 转载于:https://www.cnblogs.com/chenxi-hxl/p/9464120.html

mui aniShow 动画属性

aniShow: animationType //mui切换窗口的动画效果;(默认为slide-in-right);1."auto": (String 类型 )自动选择动画效果,使用上次显示窗口设置的动画效果,如果是第一次显示则默认动画效果。 2.&qu…

java中和char功能相反的是_JAVA基础语法

java的基础语法Java中的程序可分为结构定义语句和功能执行语句.结构定义语句:用于声明一个类或方法,功能执行语句用于实现具体的功能。功能执行语句:每条功能执行语句的结尾都必须用英文分号(;)结束。public修饰的类名必须和文件名一致(如果没…