问题
直接使用https://github.com/Tencent/ncnn/releases 下面的和官方的opencv 出现了typeid无法识别的问题。
如果直接使用Releases · nihui/opencv-mobile · GitHub 的opencv但是看了有些函数被去掉了,我一个项目刚好需要estimateAffinePartial2D函数,但是恰好他没有,那么只能选择官方的opencv(https://github.com/opencv/opencv/releases)
但是又碰上了 error: use of typeid requires -frtti
主要是用到了typeid 引起的,android为了效率关闭了运行时类型信息 (RTTI),开启会增加程序大小和降低性能。
这里需要重新自己编译ncnn,具体问题,这里解决了问题,然后再次记录下,以便后续自己方便查询
下载
1、下载源码
首选下载代码:https://github.com/Tencent/ncnn/releases
2、下载工具ndk
我是centos系统,选择的linux 64,编译ncnn工具有要求:
ndk版本需要小于23
cmake版本需要大于3.21
Unsupported Downloads · android/ndk Wiki · GitHub
下载解压之后,需要修改
vim android-ndk-r22b/build/cmake/android.toolchain.cmake
大概470行,把-g注释掉,可以寻找 # Generic flags. 定位,具体如下
引入环境变量
export ANDROID_NDK=/root/ndk/android-ndk-r22b
3、其他工具
安装cmake 版本,版本需要大于3.21
编译
1、编译armv7
进入ncnn代码的根目录,创建目录
mkdir -p build-android-armv7
cd build-android-armv7
- 创建执行文件脚本run.sh
cmake -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake" \
-DANDROID_ABI="armeabi-v7a" -DANDROID_ARM_NEON=ON -DNCNN_DISABLE_RTTI=OFF -DNCNN_DISABLE_EXCEPTION=OFF \
-DANDROID_PLATFORM=android-14 -DNCNN_VULKAN=ON ..
- 添加权限 chmod +x run.sh
- 执行脚本 ./run.sh
- 编译
make -j$(nproc)
make install
目录下面会生成install目录
把此目录拷贝到jni下面
2、编译aarch64
在代码根目录创建目录
mkdir -p build-android-aarch64
cd build-android-aarch64
创建执行脚本run.sh
cmake -DCMAKE_TOOLCHAIN_FILE="$ANDROID_NDK/build/cmake/android.toolchain.cmake"\
-DANDROID_ABI="arm64-v8a" -DNCNN_DISABLE_RTTI=OFF -DNCNN_DISABLE_EXCEPTION=OFF \
-DANDROID_PLATFORM=android-21 -DNCNN_VULKAN=ON ..
添加执行权限 chomd +x run.sh
执行./run.sh
编译安装
make -j$(nproc)
make install
把install 下面的文件拷贝到jni下面
在android的jni下面创建一个目录,或者下载一个ncnn的库,把里面的include和lib替换掉就可以了
编译ok,问题成功解决