【问题标题】:gcc's fvisibility at compile time or link timegcc 在编译时或链接时的可见性
【发布时间】:2011-03-11 23:47:12
【问题描述】:

我正在尝试使用 gcc 的 fvisibility 功能来限制共享库的 ABI。但是我很困惑什么是正确的方法。

我的 makefile 将构建过程分为两个阶段。第一步,所有 .cpp 文件都使用一些 gcc 选项构建为目标文件。然后使用另一组 gcc 和 ld 选项将所有目标文件链接在一起。从我读到的内容来看,fvisibility 与第二步有关。然而,这与我观察到的结果相矛盾。如果我将 fvisibility=hidden 添加到编译时选项,结果与预期一致, nm -D 报告的导出符号集要小得多。相反,如果我将它添加到链接时间选项中,它似乎不会影响构建。

在寻找解释时,我比较了使用和不使用 fvisibility 生成的目标文件。区别似乎在于目标文件中符号的地址。但是我不知道地址的差异如何将消息传递给链接器,以便它能够在一种情况下隐藏符号并在另一种情况下公开它们。

谁能给我解释一下。感谢您的宝贵时间。

【问题讨论】:

    标签: c++ gcc linker


    【解决方案1】:

    您可能会发现http://gcc.gnu.org/wiki/Visibility 会有所帮助

    【讨论】:

    • 我知道。我重新阅读了它,但仍然无法回答我的问题。目标文件 (*.o) 应该能够用于静态库和共享库。然而,情况似乎并非如此。
    猜你喜欢
    • 2019-10-15
    • 2019-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多