使用Clang而不是GCC构建Android?同时使用Clang STL库而不是GNUSTL库?

10

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

但它总是在使用标准库时给我链接错误。

非常感谢您的任何帮助!


2
请发布您收到的链接错误... - JBL
2个回答

13
你的 *.mk 文件中有几个错误: libc++_static 不是 APP_STL 的正确值,这里应该是 c++_static
当在 Android.mk 中设置 NDK_TOOLCHAIN_VERSION 时没有效果,应该在 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 <= pugixml.cpp clang:对于-aarch64-fix-cortex-a53-835769选项:只能出现零次或一次!make:*** [obj/local/arm64-v8a/objs/spugixmllib/pugixml/src/pugixml.o] Error 1。我们无法为arm64构建pugixml吗?请帮忙。谢谢。 - AdiAtAnd

-2

构建设置是正确的,通常是因为您链接了使用gcc而不是clang的库。请检查所有链接的库是否都使用clang!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接