【问题标题】:build android with clang instead of gcc ? and the clang stl lib instead of gnustl lib?用clang而不是gcc构建android?和clang stl lib而不是gnustl lib?
【发布时间】:2014-09-22 09:04:43
【问题描述】:

我正在尝试使用 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 库的链接错误。

任何帮助表示赞赏!

【问题讨论】:

  • 发布你得到的链接错误...

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


【解决方案1】:

您的 *.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

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

【讨论】:

  • 我正在尝试构建 pugixml。我总是收到以下错误 [arm64-v8a] Compile++ : spugixmllib
【解决方案2】:

建筑设置正确, 大多数情况下发生这种情况是因为您正在链接使用 gcc 而不是 clang 的库。检查所有链接库是否使用 clang!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多