Irb*_*bis 5 c++ visibility symbols shared-libraries static-libraries
我有一个 C++ 共享库 - libA.so. 我使用-fvisibility=hidden标志隐藏符号。应该可见的符号具有以下属性:__attribute__ ((visibility ("default"))). 该库链接到静态库 - libB.a。该静态库 ( libB.a) 中的所有符号应仅对共享库 ( libA.so)可见。我也用 flag 编译了静态库-fvisibility=hidden。我得到了想要的结果 - 来自libB.a的符号仅对libA.so外部世界可见但对外部世界隐藏,例如以下命令nm -C libA.so不显示来自libB.a.
你能解释一下这个标志-fvisibility=hidden是如何在上面的场景中与静态库一起在内部工作的吗?
添加了可见性功能以支持限制共享库的接口,即减少导出函数的数量。默认情况下(不带-fvisibility=hidden)链接器将导出库中的所有函数,这在大多数情况下不是您想要的。
在静态库链接期间,可见性被忽略,即当链接libB.a并从中提取函数时,链接器根本不会查看可见性注释。另一方面,在将函数(从libB.a)拉入最终共享库(libA.so)后,它们将被导出并污染 libA 的接口,除非您-fvisibility=hidden在编译静态库本身时通过隐藏它们。
| 归档时间: |
|
| 查看次数: |
137 次 |
| 最近记录: |