我正在尝试使用gcc的可行性功能来限制共享库的ABI。但是我感到困惑的是正确的方法。
我的makefile分两个阶段组织构建过程。第一步,使用某些gcc选项将所有.cpp文件构建为目标文件。然后,使用另一组gcc和ld选项将所有目标文件链接在一起。据我了解,可行性与第二步有关。但是,这与我观察者的结果相矛盾。如果我在编译时选项中添加fvisibility = hidden,结果与预期的一样,nm -D报告的导出符号要少得多。相反,如果我将其添加到链接时间选项中,似乎不会影响构建。
在寻找解释时,我比较了带有和不带有可行性的目标文件。差异似乎在于目标文件中符号的地址。但是,我不知道地址的这种差异如何将消息传递给链接器,以便它能够在一种情况下隐藏符号,而在另一种情况下暴露符号。
任何人都可以向我解释一下。感谢您的时间。