使用clang而不是gcc构建android?和clang stl lib而不是gnustl lib?

Kam*_*lia 10 android gcc clang android-ndk c++11

我试图使用clang而不是gcc构建一个Android ndk应用程序,因为知道我已经在Android.mk中尝试了这个

NDK_TOOLCHAIN_VERSION := clang
LOCAL_CLANG :=true
LOCAL_LDLIBS := -lc++_static
LOCAL_CFLAGS := -std=c++11
Run Code Online (Sandbox Code Playgroud)

并在Application.mk中

APP_PLATFORM    := android-9
APP_STL         := libc++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := armeabi-v7a
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示赞赏!

ph0*_*h0b 13

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

libc++_static对于APP_STL来说,它不是一个合适的值,它应该在c++_static这里.

NDK_TOOLCHAIN_VERSION在Android.mk中设置时没有效果,应该在Application.mk中设置

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

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

另外,你APP_ABI只设置为armeabi-v7a,是故意的吗?Android也可以在其他体系结构上运行,如果您也相应地编译库,您将获得更好的性能.您可以设置APP_ABIall或架构的名单armeabi-v7a x86...

综上所述:

Android.mk

LOCAL_CFLAGS := -std=c++11
Run Code Online (Sandbox Code Playgroud)

Application.mk

NDK_TOOLCHAIN_VERSION := clang

APP_PLATFORM    := android-9
APP_STL         := c++_static
APP_CPPFLAGS    := -fexceptions -frtti
APP_ABI         := all
Run Code Online (Sandbox Code Playgroud)

如果您继续遇到编译代码的麻烦,请显示您遇到的确切错误.