gpt4 book ai didi

c++ - gcc 在编译时或链接时的可见性

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:31 27 4
gpt4 key购买 nike

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

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

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

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

最佳答案

编译时,因为可见性放在对象 (.o) 文件中,然后在创建完整的可执行文件/共享对象时由链接器使用。在链接时而不是编译时使用它时,它将没有任何效果,因为目标文件中的可见性仍然是默认。我发现根本不需要在链接时使用它。

如何存储可见性的情况下,不同的符号可能位于不同的段中,并且它们从段的选项中获取它们的可见性。

关于c++ - gcc 在编译时或链接时的可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3180946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com