gpt4 book ai didi

gcc - 如何将 -fvisibility 选项应用于静态库中的符号?

转载 作者:行者123 更新时间:2023-12-03 06:45:53 51 4
gpt4 key购买 nike

我有一个共享库项目,它是由 4 个静态库 ( .a ) 和一个对象 ( .o ) 文件构建的。我正在尝试添加 -fvisibility=hidden选项将输出中的符号限制为仅我在源中使用 __attribute__ 标记的符号。

我添加了-fvisibility=hidden .so 的编译选项的选项项目(涵盖 .o 文件)和 .a项目。

目标文件中的符号已按预期从最终 .so 中删除。 。然而 .a 中的符号项目全部还在决赛.so文件。添加-fvisibility=hidden .so 的选项link 命令无效。

我做错了什么?

我的目的是从 .so 中删除除了库的接口(interface)函数之外的所有符号。

编辑:我实际上使用了 version map暂时解决这个问题。然而,随着外部符号的变化,它需要持续维护版本脚本。接受的答案有更好的主意。

最佳答案

只需将 -Wl,--exclude-libs,ALL 传递给 gcc

这将告诉链接器将静态库中的所有符号转换为隐藏。

--exclude-libs 还接受存档列表(即静态库名称),以更细粒度地隐藏符号的库。

注意:这仅适用于使用 GNU binutils 的系统(例如 Linux)或支持 --exclude-libs 的链接器(例如,它不适用于OSX 的 ld64)

关于gcc - 如何将 -fvisibility 选项应用于静态库中的符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2222162/

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