1
在编写共享库时,通常建议隐藏所有内部符号以减少动态链接时间,通常使用链接描述文件或-fvisibility
选项。将静态库链接到共享库时应该隐藏符号吗?
- 内部静态库
- 第三方静态库(例如,libuv)
所有:
在我的情况下,共享库两种类型的其他库的链接使用-Wl,--whole-archive
选项将它们链接到共享库中,以便生成的共享库自足并且仅链接到stdlib。
来自内部静态库的所有符号都是隐藏的,因为它们不是公共API的一部分。
问题是隐藏来自第三方静态库的符号有什么优点和缺点?是否有最佳做法和已知的陷阱?一方面,它们不是我图书馆的公共API的一部分。另一方面,它们是第三方库的公共API的一部分。
我猜想用户想要链接到另一个版本的同一个第三方库时会出现问题。理论上隐藏它的符号可能会解决它们,但它认为在实践中它可能会导致一些新的意想不到的问题。