我正在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。
答案 0 :(得分:1)
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支持。