gpt4 book ai didi

c++ - 静态库中的隐藏符号

转载 作者:行者123 更新时间:2023-12-04 11:26:06 25 4
gpt4 key购买 nike

我有一个 C++ 共享库 - libA.so .我使用 -fvisibility=hidden 隐藏符号旗帜。应该可见的符号具有以下属性:__attribute__ ((visibility ("default"))) .该库链接到静态库 - libB.a .该静态库 ( libB.a ) 中的所有符号应该仅对共享库 ( libA.so ) 可见。我也用标志 -fvisibility=hidden 编译了静态库.我得到了想要的结果 - 来自 libB.a 的符号仅对 libA.so 可见但对外界隐藏,例如以下命令 nm -C libA.so不显示来自 libB.a 的符号.
你能解释一下如何标志-fvisibility=hidden在上述情况下与静态库在内部工作?

最佳答案

添加了可见性功能以支持限制共享库的接口(interface),即减少导出函数的数量。默认情况下(没有 -fvisibility=hidden )链接器将导出库中的所有函数,在大多数情况下,这不是您想要的。
在静态库链接期间,即在链接时忽略可见性 libB.a并且从它链接器中提取函数根本不会查看可见性注释。另一方面,在函数被(从 libB.a )拉入最终共享库( libA.so )之后,它们将被导出并污染 libA 的界面,除非你通过 -fvisibility=hidden 隐藏它们。编译静态库本身时。

关于c++ - 静态库中的隐藏符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67414559/

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