android - 用 clang 而不是 gcc 构建 android?和 clang STL 库而不是 gnuSTL 库?

标签 android gcc c++11 android-ndk clang

我正在尝试使用 clang 而不是 gcc 构建一个 android ndk 应用程序,因为我已经尝试过这个 在 Android.mk

NDK_TOOLCHAIN_VERSION := clang
LOCAL_CLANG :=true
LOCAL_LDLIBS := -lc++_static
LOCAL_CFLAGS := -std=c++11

在 Application.mk 中

APP_PLATFORM    := android-9
APP_STL         := libc++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := armeabi-v7a

但它总是给我与 std 库的链接错误。

感谢任何帮助!

最佳答案

您的 *.mk 文件中有几个错误:

libc++_static 不是 APP_STL 的正确值,这里应该是 c++_static

NDK_TOOLCHAIN_VERSION 在 Android.mk 中设置时无效,应在 Application.mk 中设置

LOCAL_CLANG 是 AOSP 的系统模块内部使用的变量,在使用 NDK 时不是。

由于您将 APP_STL 设置为 c++_static,NDK 工具链将正确地告诉链接器要使用的库,您不应添加 LOCAL_LDLIBS := -lc++ _static.

此外,您将 APP_ABI 设置为仅 armeabi-v7a,是故意的吗? Android 也可以在其他架构上运行,如果您也相应地编译您的库,您将在这些架构上获得更好的性能。您可以将 APP_ABI 设置为 all 或架构列表 armeabi-v7a x86...

总结:

Android.mk

LOCAL_CFLAGS := -std=c++11

Application.mk

NDK_TOOLCHAIN_VERSION := clang

APP_PLATFORM    := android-9
APP_STL         := c++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := all

如果您在编译代码时仍然遇到问题,请显示您遇到的确切错误。

关于android - 用 clang 而不是 gcc 构建 android?和 clang STL 库而不是 gnuSTL 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25970252/

相关文章:

android - 如何用视频文件替换 Android 相机模拟?

c++ - 使用 Caffe 运行简单的 C++ 程序

visual-studio - 参数包扩展失败

c++ - 与 alignas 语法作斗争

android - OpenGLRenderer,发现无效的字形

android - 设置 adb 供应商 key

c - 使用 C 的某些示例的 Base64 解码不正确

c++ - C++11 中访问指向 std::vector 中元素 n 的指针的标准方法是什么?

android - 无法从 Activity 获取数据到 Service

c - '[' 标记之前的汇编语言解析错误