MNN
MNN copied to clipboard
android 无法使用opencl后端进行推理
平台(如果交叉编译请再附上交叉编译目标平台):
编译平台:mac 目标平台:android
Github版本:
9aef4b6ff4ad297bec728317e7b526ad8544a6e7
编译方式:
1.打开根目录下的cmakelist.txt opencl编译选项的开关
# backend options
option(MNN_METAL "Enable Metal" OFF)
option(MNN_OPENCL "Enable OpenCL" ON)
option(MNN_OPENGL "Enable OpenGL" ON)
option(MNN_VULKAN "Enable Vulkan" ON)
option(MNN_ARM82 "Enable ARM82" OFF)
option(MNN_ONEDNN "Enable oneDNN" OFF)
option(MNN_AVX512 "Enable AVX512" OFF)
option(MNN_CUDA "Enable CUDA" OFF)
option(MNN_TENSORRT "Enable TensorRT" OFF)
option(MNN_COREML "Enable CoreML" OFF)
2.进入android工程,执行编译
cd project/android
mkdir build_32 && cd build_32 && ../build_32.sh for armv7
mkdir build_64 && cd build_64 && ../build_64.sh for armv8
编译通过
将编译生成的libMNN_CL.so拷贝到我的项目目录下,在项目的cmakelist中添加libMNN_CL.so链接依赖,并在代码中
System.loadLibrary("MNN");
System.loadLibrary("MNN_CL");
System.loadLibrary("mnncore");
运行后,提示
E/linker: library "/system/vendor/lib64/libOpenCL.so" ("/vendor/lib64/libOpenCL.so") needed or dlopened by "/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/base.apk!/lib/arm64-v8a/libMNN_CL.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/lib/arm64:/data/app/~~S-0OWZhOKUsolExRFCMjrQ==/com.taobao.android.mnndemo-tPHUPNGUrLS3eOeDgdXEow==/base.apk!/lib/arm64-v8a", permitted_paths="/data:/mnt/expand:/data/data/com.taobao.android.mnndemo"]
android 什么设备,另外这个日志看着不一定有问题?
手机:oppo find x3 android版本: 12 mnn_cl依赖的libOpenCL库,无法访问,然后会走cpu推理。我想要opencl加速。 不过用vulkan可以。
Android API 31以后,xml里面要额外配置uses-native-library,这样APP才能链接到系统的libOpenCL.so。 https://developer.android.google.cn/guide/topics/manifest/uses-native-library-element?hl=zh-cn
Android API 31以后,xml里面要额外配置uses-native-library,这样APP才能链接到系统的libOpenCL.so。 https://developer.android.google.cn/guide/topics/manifest/uses-native-library-element?hl=zh-cn
太强了大佬,解决了