当您编写共享库时,通常建议隐藏所有内部符号以减少动态链接时间,通常使用链接描述文件或-fvisibility
选项。
就我而言,共享库与两种类型的其他库链接:
所有这些都使用-Wl,--whole-archive
选项链接到共享库中,因此生成的共享库是自给自足的,只链接到stdlib。
内部静态库中的所有符号都是隐藏的,因为它们不是公共API的一部分。
问题是将符号隐藏在第三方静态库中的优缺点是什么?有没有最好的做法和已知的陷阱?一方面,他们不是我图书馆公共API的一部分。另一方面,它们是第三方库的公共API的一部分。
我想当用户想要链接到同一第三方库的另一个版本时会出现问题。理论上隐藏它的符号可能会解决它们,但它认为在实践中它可能会导致一些新的意外问题。
答案 0 :(得分:1)
在我看来,您应该隐藏所有不属于您的API的符号。您似乎还需要一个选项--exclude-libs,ALL
来将第三方静态库符号转换为隐藏库符号。我不知道任何解决方案的缺点,它加速了动态链接器,也没有看到与另一个库版本的进一步静态链接的任何缺点..因为它的静态链接不是动态链接(热交换等)。