【问题标题】:NDK - problems after GNUSTL has been removed from the NDK (revision r18)NDK - 从 NDK 中删除 GNUSTL 后的问题(修订版 r18)
【发布时间】:2018-09-19 16:48:54
【问题描述】:

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

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

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

通过添加这行代码,我设法避免在所有 NDK r17c 版本的其余部分中出现任何与 NDK 相关的问题。

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

查看 NDK 修订历史记录:https://developer.android.com/ndk/downloads/revision_history

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

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

提前谢谢你。

【问题讨论】:

  • 在我看来,解决方案是重建 OpenCV 以使用 libc++ 而不是 gnustl。
  • 我该怎么做?顺便说一句,谢谢你的提示。
  • 好消息!您can 只需下载 OpenCV 4.0.1 即可与 NDK r.18+ 顺利运行

标签: android android-studio opencv android-ndk


【解决方案1】:

正如@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...

【讨论】:

  • 一些额外的 CMake 标志将使构建不会失败并且更快:-DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF
  • CMake 错误:源目录“/openCV/sdk/build”似乎不包含 CMakeLists.txt。
  • @Aqeel iqbal 如果您能提供更多详细信息会有所帮助
【解决方案2】:

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

【讨论】:

  • 你救了我该死的命 :)))) ,tnq 你这么多。这让我紧张了 5 天
【解决方案3】:

第一条回复@Aqeel iqbal的评论,找不到cmakelist的原因可能是你没有使用opencv源码,opencv为android sdk提供了独立包。以下 ling 是 opencv 源码的原始源码 opencv release,选择sources下载,而不是android pack。

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2017-03-25
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多