【发布时间】:2011-03-11 23:47:12
【问题描述】:
我正在尝试使用 gcc 的 fvisibility 功能来限制共享库的 ABI。但是我很困惑什么是正确的方法。
我的 makefile 将构建过程分为两个阶段。第一步,所有 .cpp 文件都使用一些 gcc 选项构建为目标文件。然后使用另一组 gcc 和 ld 选项将所有目标文件链接在一起。从我读到的内容来看,fvisibility 与第二步有关。然而,这与我观察到的结果相矛盾。如果我将 fvisibility=hidden 添加到编译时选项,结果与预期一致, nm -D 报告的导出符号集要小得多。相反,如果我将它添加到链接时间选项中,它似乎不会影响构建。
在寻找解释时,我比较了使用和不使用 fvisibility 生成的目标文件。区别似乎在于目标文件中符号的地址。但是我不知道地址的差异如何将消息传递给链接器,以便它能够在一种情况下隐藏符号并在另一种情况下公开它们。
谁能给我解释一下。感谢您的宝贵时间。
【问题讨论】: