Windows11 Qt6.5.0+OpenCV4.7.0+android-ndk-r25.2编译arm64-v8a动态库(.so)、静态库(.a)
1.在cmake-gui中,点击Add Entry,增加ANDROID_ABI,值为arm64-v8a,增加ANDROID_PLATFORM,值为24,版本配置如下:
注:一定要在configure前添加,否则修改也不再使用,会使用默认的armeabi-v7a编译器。
2.点击configure:
3.参数调整:
-
BUILD_ANDROID_PROJECTS
不需要示例项目可直接取消勾选 -
BUILD_ANDROID_EXAMPLES
= OFF -
BUILD_SHARED_LIBS = OFF (如果 On 则只编译 so 库)
WITH_CUDA = OFF (CUDA 是 NVidia 推出的并行计算架构,编译非安卓 SDK 时建议添加)
WITH_OPENCL = ON (因为我们编译的是 android sdk,所以建议添加移动端的并行架构支持)
WITH_OPENCL_SVM = ON (建议开启共享虚拟内存)
BUILD_opencv_world
= ON
3.设置好环境变量的cmd中,切换目录到编译目录(build_android),执行mingw32-make -j16 开始编译。
4.编译完成后,执行mingw32-make install,过会就可以在安装目录找到生成的静态库了(*.a,在编译目录下的install)。
5.M_LIBRARY:C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libm.so
6.ZLIB_LIBRARY_RELEASE:C:/Users/Administrator/AppData/Local/Android/Sdk/ndk/25.2.9519653/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/lib/aarch64-linux-android/21/libz.so
注意:此时只生成了arm64-v8a的静态库(*.a),若需要动态库,请继续。
5.打开cmake-gui,修改以下选项:
修改完成后,再次点击configure,此时应该不会有红色的文字,点击generate,生成makefile文件。
6.设置好环境变量的cmd中,切换目录到编译目录(build_android),执行mingw32-make -j16 开始编译。
7.编译完成后,执行mingw32-make install,过会就可以在安装目录找到生成的动态库了(*.so,在编译目录下的install)。
8.到此为止,已经编译完成arm64-v8a的动态库和静态库。
9.注:若QT_ARCH=arm64-v8a,必须添加下面一句并且*.so必须添加在*.a之前。
LIBS += $$OPENCV_NATIVE/libs/$$QT_ARCH/libopencv_world.so
否则,会报错:cap_android_mediandk.cpp相关的错误。
10.参考地址:https://blog.csdn.net/aggs1990/article/details/124526728