ncnn android编译

问题

直接使用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,具体问题,这里解决了问题,然后再次记录下,以便后续自己方便查询

android studio cmake里同时加入opencv和ncnn后报错:use of typeid requires -frtti · Issue #3231 · Tencent/ncnn · GitHub

下载

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,问题成功解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值