我正在使用 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>
标题。
我在这里错过了什么?有没有办法通过 clang 使用 4.9 GNU STL?
最佳答案
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): 断言 'DeclKind != Decl::LinkageSpec && “不应该对链接规范执行查找!”' 失败。
关于Android NDK clang 编译器找不到 std::make_unique,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29018310/