使用--exclude-libs选项可以在将gcc用作编译器时隐藏符号。
一个工作示例:
我的Application.mk文件如下:
APP_ABI := all
APP_STL=c++_static
APP_PLATFORM := android-21
TARGET_PLATFORM := android-21
NDK_TOOLCHAIN_VERSION := 4.9
Android.mk文件中的以下行完成了该工作:
LOCAL_LDFLAGS += -Wl,--exclude-libs=library.a
如果我从Application.mk文件中删除以下行
NDK_TOOLCHAIN_VERSION := 4.9
我相信Clang被用作默认编译器,它似乎没有--exclude-libs选项,因此来自library.a的符号不再被隐藏。
是否有等效于gcc --exclude-libs选项的Clang?
我已经尝试了以下链接中的建议
http://lists.llvm.org/pipermail/cfe-dev/2013-June/030376.html
但这似乎没有任何作用。
修改源代码和使用Clang的LTO Visibility属性不是一个选择。
答案 0 :(得分:0)
您链接到的页面正确。 --exclude-libs
是链接器选项,即使使用Clang进行编译,GCC仍用于链接。从NDK文档中:
还包括GCC二进制文件,因为Clang依赖于GCC发行版中包含的同一汇编程序,链接器,标头和库。
因此,LOCAL_LDFLAGS += -Wl,--exclude-libs,library.a
应该有效(请注意,,
而不是=
)。我已经验证了它确实在CMake项目中工作(该项目使用略有不同的语法,但是设置了完全相同的链接器选项)。
最不适合您的原因是归档文件的实际文件名不是library.a
(例如,可能是liblibrary.a
或类似名称)。