在 CMakeLists 中设置 ANDROID_STL

dav*_*idv 4 c++ android cmake android-ndk

我正在 Android Studio 2.2 中编译 C++ 库代码。我遵循新指南,在那里我将所有文件添加到我的项目中,并使用 CMake(和 CMakeLists.txt)像这样编译它。我想使用C++14 功能,以及诸如 atomic、stoi 之类的东西,但构建失败并出现错误。

error: no type named 'condition_variable' in namespace 'std'
error: no member named 'stoi' in namespace 'std'
Run Code Online (Sandbox Code Playgroud)

这是我的 CMakeLists 的样子(其他行设置源文件和其他内容):

find_library(GLES GLESv2)
include_directories(${COMMON_PATH} /usr/local/include)
set(ANDROID_STL "c++_shared")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14 -latomic")

add_library(native-lib SHARED ${COMMON_SRC})
target_link_libraries(native-lib ${GLES})
Run Code Online (Sandbox Code Playgroud)

我在 android 页面(这里)上找到了这篇文章,但我不知道在使用 CMakeLists 而不是 ndk-build 时如何以及是否可以做到这一点。我看到其他问题使用c++_static运行时解决它,但仅使用 ndk-build。

Ger*_*rry 5

  • 文档对 cmake 案例更有用: arguments "-DANDROID_STL=c++_shared
  • Gradle 在使用时也会将 libc++_shared.so 打包到 APK 中c++_shared;在早期版本的 Android 操作系统上绕过 Gradle 可能会给您的应用带来麻烦。

在这个问题的时候,Android Studio 可能有问题;现在Android Studio 3.1.3,应该没问题


goe*_*goe 0

用于生成 Android 本机库的交叉编译过程使用 NDK 库中的 C++ 依赖项。Google提供的NDK很好,东西也很多,但是C++11和C++14支持不完整。

如果您想使用 C++14 功能,您可以使用其他 NDK,例如CrystaX NDK。使用 CrystaX,您还可以获得 C++17 支持。