gpt4 book ai didi

android - 使用 Clang 作为编译器构建 Android 项目时隐藏静态库中的符号

转载 作者:行者123 更新时间:2023-12-02 16:13:16 61 4
gpt4 key购买 nike

使用 gcc 作为编译器时隐藏符号可以使用 --exclude-libs 选项来完成。

一个工作示例:

我的 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 属性不是一种选择。

最佳答案

您链接到的页面是正确的。 --exclude-libs是一个链接器选项,即使使用 Clang 编译,GCC 仍然用于链接。来自 NDK 文档:

GCC binaries are also included, because Clang relies on the same assembler, linker, headers, libraries included in the GCC distribution.

所以,LOCAL_LDFLAGS += -Wl,--exclude-libs,library.a应该可以工作(注意 , 而不是 = )。我已经验证它确实可以在 CMake 项目中工作(该项目使用稍微不同的语法,但设置完全相同的链接器选项)。

这对您不起作用的最可能原因是您的存档的实际文件名不是 library.a (例如,它可能是 liblibrary.a 或类似的东西)。

关于android - 使用 Clang 作为编译器构建 Android 项目时隐藏静态库中的符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51476036/

61 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com