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,所以要解决这个问题只能自己动手编译。具体步骤如下
- 下载opencv 源码包,注意是sources,而不是android sdk包。下载地址 https://opencv.org/releases.html
- 解压包,cmd 进入根目录。
- 执行如下操作
其中 $ANDROID_DIR 就是你的Android sdk根目录 对于我来说是下面这个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
/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