在嘗試了很多的方法後,終於可以在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的未來將是怎樣的,...