Android NDK clang编译器找不到std :: make_unique

时间:2015-03-12 19:10:17

标签: android c++ android-ndk clang c++14

我使用的是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?

1 个答案:

答案 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.