在Android Studio上使用OpenCL

2021-09-09 08:45:19 字數 1447 閱讀 5625

在嘗試了很多的方法後,終於可以在android studio上使用opencl,現在記錄一下過程。

git clone [email protected]:gaussrieman/libopencl-stub.git

在android.mk中新增乙個static library

include $(clear vars)

local_module := libopenclstub

local_c_includes := path/to/libopencl-stub/include

local_src_files := path/to/libopencl.c

local_cflags := -fpic -o2

include $(build_static_library)在native-lib中新增對stub庫的靜態鏈結

local_static_libraries += libopenclstub在native-lib中新增對cl標頭檔案的支援

local_c_includes += path/to/libopencl-stub/include/cl/在cpp或c中包含cl標頭檔案就可以使用了

很多人會參考一篇文章,裡面提到了這個原因,因為google是不公開支援opencl的,所以ndk中並不會有libopencl.so,這個庫都是放在各個廠家的庫中,比較常見的位置是"system/vendor/lib64/libopencl.so",但是如果你將這個庫adb pull到host,然後作為乙個動態庫放到android studio中使用,在執行時會報錯找不到「libc++.so」:

03-21 17:07:51.502 31234 31234 w linker  : library "libandroid_runtime.so"

("/system/lib/libandroid_runtime.so") needed or dlopened by

這是因為libopencl.so會呼叫libc++.so,以及libcutils.so,這些依賴可以通過下面的命令找到。

aarch64-linux-android-readelf -dw libopencl.so

另一種方式是上面提到的,使用stub,將libopencl.so動態載入,libopencl.c主要就是幫我們完成適配平台和封裝介面的工作,它主要用到dlopen和dlsym,前者用來載入vendor支援的cl動態庫,後者用來對映介面。

再扯一點題外話,google不支援opencl, khronos小組也推出了vulkan,所以cl地位很尷尬,目前在第三方庫中使用opencl最好的就是使用stub,萬一哪天google把dlopen也關了,那就真的沒得玩了。。。

在Android Studio新增本地aar包引用

1.如何在android studio新增本地aar包引用 2.完成上述步驟之後,99 的可能專案已經沒有任何問題了。但是最近出現了很奇怪的問題 上述步驟之後 中依然無法匯入第三方的包 類 報紅色錯誤 cannot resolve.但是相應的 卻可以正常編譯 執行,安裝在手機上之後也沒有任何問題。解...

在AndroidStudio中使用OpenCV總結

簡單2步 模組的xml檔案 模組的gradle android 參好上面 然後run執行正常就可以下一步了,快了快了加油 arguments dandroid stl c shared 這裡是要新增的不然可能無法載入so 這裡是新增的 sourcesets 自己按照實際情況新增,只是我的總結。這裡我...

ERP在中國(上)

編者按 有關erp的引入是許多企業頗為關注的問題。自從1981年瀋陽第一工具機廠從德國工程師協會引進了第一套mrpii軟體以來,mrpii erp在中國的應用與推廣已經歷了近20年。從起步 探索到現在,尤其是在1998年,erp在各行各業開始變得耳熟能詳。但是究竟何為erp,erp的未來將是怎樣的,...