我试图使用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库的链接错误。
任何帮助表示赞赏!
答案 0 :(得分:13)
* .mk文件中存在多个错误:
libc++_static
不是APP_STL的正确值,此处应为c++_static
。
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检查所有链接的库是否已用完。