出现错误/ncnn/src/cpu.cpp:426: undefined reference to `stderr'完美解决方案。

解决ncnn移植到RK3399错误
本文详细记录了解决ncnn框架移植到RK3399硬件平台时遇到的undefined reference to `stderr'错误的过程。通过调整CMake配置、修改目标CPU架构为arm64-v8a及提高minSdkVersion版本,最终成功生成libMobileNetssd.so文件,使项目在Android平台上顺利运行。

前提情况

1。 android studio 编译器
2。 利用ncnn前向推理框架进行移植caffemodel到android手机端
3。 使用cmake进行编译,NDK java的c++接口

出现问题

/ncnn/src/cpu.cpp:426: undefined reference to `stderr'(主要问题根源)

具体问题如下(为了大家能够看得清楚,这里我把背景调成白的了,平时都是黑的)
在这里插入图片描述

分析问题

首先出现问题的过程是因为我这边用的ncnn最后make build的平台是armeabi-v7a,为大多数android手机的硬件cpu结构,但是此处项目需要需要用到RK3399硬件,查之后得知cpu架构为arm64-v8a,所以需要更改一些文件(ncnn make-build时的libncnn.a文件和include文件夹,具体可参考ncnn使用),还需要更改一些路径CMakeList中的路径以及build-gradle文件中的平台名称如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这样应该如愿以偿进行编译项目工程的时候就会Cmake成功得到libMobileNetssd.so文件
并且此文件在如下图位置,当然画红框的文件夹名称应该为此时的cpu框架arm64-v8a
在这里插入图片描述

好了!
现在已经分析好了,从前到尾整个过程,但是最后编译会出现以前error
可能的问题出在分析如下

  1. 路径没有改,文件没有改(这里我从前到尾好好走了一遍是都改好的,并且路径正确)
  2. 缺少某些低版本的文件,但是最后提示error没有显示,说明不缺文件
  3. SDK的版本问题
    为啥会有最后一种思考呢?因为cmake的用法我已经很熟悉,深度学习框架caffe和前向推理ncnn的用法都不存在问题,所以唯一的问题就应该存在于sdk某些版本支持问题(android这方面很常见)

解决

https://stackoverflow.com/questions/51767214/android-studio-with-ndk-link-error-undefined-reference-to-stderr
看了这个回答,我把我的minSdkVersion改大了
在这里插入图片描述
改成这样
在这里插入图片描述
最终完美解决生成.so,整个项目也可以正常运行了
在这里插入图片描述

思考

我的想法是 因为这个cpu架构出的可能比较晚,或者说androd sdk高版本才支持所以,需要把最小的androidsdk版本调高即可

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值