我正在尝试使用 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/