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

时间:2014-09-22 09:04:43

标签: 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库的链接错误。

任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:13)

* .mk文件中存在多个错误:

libc++_static不是APP_STL的正确值,此处应为c++_static

在Android.mk中设置

NDK_TOOLCHAIN_VERSION无效,应该在 Application.mk

中设置

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

由于您将APP_STL设置为c++_static,NDK工具链将正确告诉链接器使用哪个lib,您不应添加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

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

答案 1 :(得分:-2)

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