NDK-从NDK中移除GNUSTL之后的问题(修订版r18)

时间:2018-09-19 16:48:54

标签: android android-studio opencv android-ndk

今天,我将Android Studio NDK更新为最新版本18.0.5002713。在成功完成安装过程之后,我尝试重新运行我的应用程序,但未能成功。不断出现的错误如下:org.gradle.api.ProjectConfigurationException: A problem occurred configuring project ':app'.

过去,NDK更新后,我在运行应用程序时遇到了问题,但能够通过在app.gradle文件的arguments '-DANDROID_STL=gnustl_static'配置中添加externalNativeBuild来解决这些问题。

原始问题:(OpenCV - undefined reference to 'cv::CascadeClassifier::detectMultiScale() after NDK update

通过添加这一行代码,我设法在所有NDK r17c其余版本中避免了NDK的任何问题。

不幸的是,在r18版本中,与gabi ++和stlport一起删除了对GNUSTL的支持。

请参阅NDK版本历史记录:https://developer.android.com/ndk/downloads/revision_history

删除现在不建议使用的代码行会产生错误,该错误最初是上述问题的原因。现在的问题是arguments '-DANDROID_STL=gnustl_static'的最新版本是什么?

编辑:使用'-DANDROID_STL=c++_static'会导致旧错误

谢谢。

3 个答案:

答案 0 :(得分:13)

@Michael已经建议您可以使用libc ++重建OpenCV。

要这样做:

cd $OPENCV_SRC
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 #the sdk will be here...

注意: 使用“ opencv-3.4.1” + ndk18进行了测试


由@shizhen编辑

在macOS上进行了验证,应在..命令后添加cmake,以使以下错误消失。

  

CMake错误:源目录“ /opencv-3.4.1/build”似乎不包含CMakeLists.txt

更新如下:

cd $OPENCV_SRC
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 #the sdk will be here...

答案 1 :(得分:1)

更新OpenCV可能需要一段时间。同时,我建议退回到NDK r16,后者用于构建OpenCV Android二进制文件。

答案 2 :(得分:0)

在第一个评论中首先回复@Aqeel iqbal的评论,找不到cmakelist的原因可能是因为您未使用opencv源,opencv为android sdk提供了独立软件包。以下ling是opencv来源的原始来源 opencv release,选择来源进行下载,而不是android pack。

下载源代码后,cd到源文件的根目录,例如 opencv-2.4.13.6 然后执行@ y30提供的命令,并注意 $ ANDROID_DIR 可能不是您android ndk的正确文件路径,对我来说,我使用以下这些:

  

...   -DCMAKE_TOOLCHAIN_FILE = /用户/ihandysoft/Library/Android/sdk/ndk-bundle/build/cmake/android.toolchain.cmake   ...

这是我生成的armv8a https://github.com/2666fff/opencv-for-android