我使用的是Android NDK r10d。我的application.mk设置如下:
APP_CFLAGS := -DANDROID -DBUILD_OGLES2
APP_CPPFLAGS := $(APP_CFLAGS) -fexceptions -frtti -std=c++14
APP_STL := gnustl_static
APP_ABI := armeabi-v7a
APP_PLATFORM := android-15
NDK_TOOLCHAIN_VERSION := clang
我在我的代码中使用std::make_unique
并且它没有编译(说它没有找到)。从C ++ 14开始,此功能应该在STL中可用。我做了一些探讨,似乎clang并没有在NDK中使用GNU STL 4.9。如果是的话,它会在<memory>
标题内看到它之后可用。
我在这里缺少什么?有没有办法使用4.9 GNU STL和clang?
答案 0 :(得分:2)
make_unique
无法通过来自clang的gnustl获得。您可以尝试使用LLVM libc ++。在 Application.mk :
APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
编辑:
强制使用GNU STL 4.9(通过更改android-ndk-r10d/toolchains/*toolchain_name*-clang3.5/setup.mk
内的TOOLCHAIN_VERSION)会导致构建崩溃:
clang++: /s/ndk-toolchain/src/llvm-3.5/llvm/tools/clang/lib/AST/DeclBase.cpp:1293: clang::DeclContext::lookup_result clang::DeclContext::lookup(clang::DeclarationName): Assertion 'DeclKind != Decl::LinkageSpec && "Should not perform lookups into linkage specs!"' failed.