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.pswp.cn/news/277496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277496.shtml
英文地址,請注明出處:http://en.pswp.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修飾的類名必須和文件名一致(如果沒…