Android NDK 18 OPENCV 升级问题

 

android NDK 升级18版本之后 如果你使用了opencv for android目前的sdk,首先你会遇见如下错误:

Android NDK: APP_STL gnustl_static is no longer supported. 

这个错误产生的原因是因为
在 ndk 18 版本里面 Google移除了GNUSTL

  • gnustl, gabi++, and stlport have been removed.

修正这个错误其实很简单 找到 Application.mk 文件 将

APP_STL := gnustl_static 改为 APP_STL := c++_static

这时候已经编译不报错误了,但是当运行时候又会出现很多 

undefined reference to

对于这个错误,是因为之前的opencv for android 使用的是gnu编译,但是新版本 ndk18 已经不支持这个了,这也是出现所有错误的根本原因,ndk18已经推出两三个月了 而opencv团队一直没有推出新版本的android sdk,所以要解决这个问题只能自己动手编译。具体步骤如下

  1. 下载opencv 源码包,注意是sources,而不是android sdk包。下载地址 https://opencv.org/releases.html
  2. 解压包,cmd 进入根目录。
  3. 执行如下操作
    mkdir build
    cd build
    cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_DIR/ndk-bundle/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static  -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=android-24 
    make install
    cd install #这里就是打包好的sdk for android
    其中 $ANDROID_DIR 就是你的Android sdk根目录 对于我来说是下面这个
    /Users/ihandysoft/Library/Android/sdk/
    所有命令直行完成之后,新版android sdk 已经可以使用。

我在使用过程中发现了另外一个问题,

undefined reference to 'stderr'

stderr看起来是标准库中的一个东西,但是却在我这里报找不到,猜测是因为CPP代码中单独define了一个stderr,所以我这里需要将他重新声明下。

#include <stdio.h>

#undef stderr
FILE *stderr = &__sF[2];

最后测试完美运行。
附送已经打包好的 opencv 2.4 for android ndk18 
https://github.com/2666fff/opencv-for-android

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值