【问题标题】:Android NDK APP_STL gnustl_shared is no longer supported不再支持 Android NDK APP_STL gnustl_shared
【发布时间】:2019-02-27 17:16:51
【问题描述】:

我正在使用 Android Studio 3.3 Canady 11 构建一个 android NDK 项目,在构建项目时,我收到此错误:

构建命令失败。 执行过程时出错 /home/ndqa/opt/Android-SDK/ndk-bundle/ndk-build 带参数 {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/Android.mk NDK_APPLICATION_MK=/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/Application.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=1 APP_PLATFORM=android-23 NDK_OUT=/home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib APP_PLATFORM=android-21 -j10 APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}

/home/ndqa/opt/Android-SDK/ndk-bundle/build/core/add-application.mk:178: *** Android NDK:不再支持 APP_STL gnustl_shared。请切换到 c++_static 或 c++_shared。看 https://developer.android.com/ndk/guides/cpp-support.html 了解更多 信息。 .停下来。

我的机器是 Ubuntu 18,它有 android SDK,NDK 完整。 请帮我解决这个问题。 谢谢大家!

更新 如果我将 gnustl_shared 替换为 c++_static 或 c++_shared,则会显示更多错误:

Build command failed.
Error while executing process /home/ndqa/opt/Android-SDK/ndk-bundle/ndk-build with arguments {NDK_PROJECT_PATH=null APP_BUILD_SCRIPT=/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/Android.mk NDK_APPLICATION_MK=/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/Application.mk APP_ABI=armeabi-v7a NDK_ALL_ABIS=armeabi-v7a NDK_DEBUG=1 APP_PLATFORM=android-23 NDK_OUT=/home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj NDK_LIBS_OUT=/home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib APP_PLATFORM=android-21 -j10 APP_SHORT_COMMANDS=false LOCAL_SHORT_COMMANDS=false -B -n}
/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1
rm -f /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/*
rm -f /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdbserver
rm -f /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdb.setup
mkdir -p /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a
echo [armeabi-v7a] "Gdbserver      ": "[arm-linux-androideabi] /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdbserver"
install -p /home/ndqa/opt/Android-SDK/ndk-bundle/prebuilt/android-arm/gdbserver/gdbserver /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdbserver
echo [armeabi-v7a] "Gdbsetup       ": "/home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdb.setup"
echo "set solib-search-path /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a" > /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdb.setup
echo "directory /home/ndqa/opt/Android-SDK/ndk-bundle/sysroot /home/ndqa/opt/Android-SDK/ndk-bundle/sources/android/support /home/ndqa/opt/Android-SDK/ndk-bundle/sources/cxx-stl/llvm-libc++ /home/ndqa/opt/Android-SDK/ndk-bundle/sources/cxx-stl/llvm-libc++abi/include /home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1/src/ /home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/include /home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1/android/include /home/ndqa/opt/Android-SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/include" >> /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/lib/armeabi-v7a/gdb.setup
mkdir -p /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/main
echo [armeabi-v7a] "Compile++ arm  ": "main <= AndroidJni.cpp"
/home/ndqa/opt/Android-SDK/ndk-bundle/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ -MMD -MP -MF /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/main/AndroidJni.o.d -target armv7-none-linux-androideabi21 -ffunction-sections -fdata-sections -funwind-tables -no-canonical-prefixes  -g -Wno-invalid-command-line-argument -Wno-unused-command-line-argument  -fno-exceptions -fno-rtti -gcc-toolchain /home/ndqa/opt/Android-SDK/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 -fpic -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16  -marm -O0 -UNDEBUG -fno-limit-debug-info  -I/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1/src/ -I/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/include -I/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1/android/include -I/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/protobuf-3.6.1/src -I/home/ndqa/opt/Android-SDK/ndk-bundle/sources/cxx-stl/llvm-libc++/include -I/home/ndqa/opt/Android-SDK/ndk-bundle/sources/cxx-stl/llvm-libc++abi/include -I/home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp -std=c++11    -DANDROID -D GOOGLE_PROTOBUF_NO_RTTI=1 -D GOOGLE_PROTOBUF_NO_RTTI=1 -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -std=c++11 -std=c++11 -std=gnu++11  --sysroot /home/ndqa/opt/Android-SDK/ndk-bundle/sysroot -isystem /home/ndqa/opt/Android-SDK/ndk-bundle/sysroot/usr/include/arm-linux-androideabi -c  /home/ndqa/Documents/PROJ/code/MyProj/app/src/main/cpp/AndroidJni.cpp -o /home/ndqa/Documents/PROJ/code/MyProj/app/build/intermediates/ndkBuild/debug/obj/local/armeabi-v7a/objs-debug/main/AndroidJni.o

【问题讨论】:

  • APP_STL gnustl_shared is no longer supported. Please switch to either c++_static or c++_shared. See https://developer.android.com/ndk/guides/cpp-support.html for more information. . Stop. 错误说明该怎么做
  • 亲爱的 Vygintas B,我用 c++_static 或 c++_shared 替换了 Application.mk 中的 gnustl_shared,但错误更多
  • “但错误更多” 如果您希望任何人都能够帮助您解决问题,您需要说明问题所在。例如,在您的问题中包含完整、准确的错误消息。
  • 这似乎不是完整的日志。我在该文本块中没有看到任何错误。
  • 它的构建命令失败。执行进程时出错 /home/ndqa/opt/Android-SDK/ndk-bundle/.....

标签: java android c++ android-ndk


【解决方案1】:
  1. 在文件Application.mk 中将APP_STL := gnustl_static 切换为c++_staticc++_shared

APP_STL := c++_static

  1. Android 操作系统几年前切换到 clang。 NDK 的未来版本将移除 GCC,因此您越早开始使用 clang 测试您的项目越好!
  1. 对于 ndk-build,删除设置 NDK_TOOLCHAIN 或 NDK_TOOLCHAIN_VERSION 的行。

  2. 对于 cmake,删除行设置 ANDROID_TOOLCHAIN。

  3. 对于独立工具链,使用 clang/clang++ 二进制文件而不是 gcc/g++。

  4. 对于其他构建系统,请询问该构建系统的所有者。


查看更多详情:

https://developer.android.com/ndk/guides/cpp-support

https://android.googlesource.com/platform/ndk/+/master/docs/ClangMigration.md#how-to-fix-common-problems

【讨论】: