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

voi*_*ter 5 c++ android clang android-ndk 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
Run Code Online (Sandbox Code Playgroud)

std::make_unique在我的代码中使用它并没有编译(说它没有找到).从C++ 14开始,此功能应该在STL中可用.我做了一些探讨,似乎clang没有在NDK中使用GNU STL 4.9.如果是的话,它会在我看到<memory>头部内部时可用.

我在这里错过了什么?有没有办法使用4.9 GNU STL与clang?

ph0*_*h0b 3

make_unique无法通过 clang 的 gnustl 获得。您可以尝试使用 LLVM libc++ 代替。在您的Application.mk中设置它:

APP_STL := c++_static
NDK_TOOLCHAIN_VERSION := clang
Run Code Online (Sandbox Code Playgroud)

编辑:强制使用 GNU STL 4.9(通过更改内部的 TOOLCHAIN_VERSION android-ndk-r10d/toolchains/*toolchain_name*-clang3.5/setup.mk)会使构建崩溃:

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.