在CMakeLists中设置ANDROID_STL

时间:2017-02-06 09:46:59

标签: android c++ android-ndk cmake

我正在Android Studio 2.2中编译C ++库代码。我按照新指南,将所有文件添加到项目中,并使用CMake(和CMakeLists.txt)编译它,如this。我想使用 C ++ 14的功能,以及诸如atomic,stoi 之类的东西,但是这个建筑失败了。

error: no type named 'condition_variable' in namespace 'std'
error: no member named 'stoi' in namespace 'std'

这是我的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})

我在android页面(here)上发现了这篇文章,但我不知道如何以及如果我在使用CMakeLists而不是ndk-build时能够做到这一点。我看到其他问题使用 c ++ _ static 运行时来解决它,但只能使用ndk-build。

2 个答案:

答案 0 :(得分:1)

  • documentation对于cmake情况将更为有用: arguments "-DANDROID_STL=c++_shared
  • 在使用c++_shared时,Gradle还将libc ++ _ shared.so打包到APK中;绕过Gradle可能会对您在早期版本的Android OS上的应用造成麻烦。

在提出此问题时,Android Studio可能会遇到麻烦;在现在的Android Studio 3.1.3上应该没问题

答案 1 :(得分:0)

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

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