【问题标题】:Global symbols becoming local at link全局符号在链接处变为本地
【发布时间】:2014-09-09 22:55:32
【问题描述】:

我的全局符号有问题。我有一个使用默认可见性编译的类(其余代码是隐藏的)并且没有内联。可执行文件也与 -E 标志链接。此类从 dlopen 加载的库中调用;所以它的符号需要是全球性的。

当我查看 .o 文件时,一切正常: FUNC 全局默认值

然而在最终的二进制文件中,同样的函数变成了这样: FUNC 本地默认值

我认为 gc-sections 是造成这种情况的原因,我不能不使用它。有没有办法告诉 gc-sections 忽略公共 API?

【问题讨论】:

  • 您没有提供足够的信息来回答您的问题。缺少的部分:哪个链接器(gold 或 ld),哪个版本,链接器命令行是什么,是否涉及链接器脚本,如果有,它们包含什么?
  • 此时我相信这是一个链接器错误。 binutils bugzilla 中也有多个与 gc-sections 相关的错误;我想我正在击中其中一个。我已经尝试使用最近的工具链版本使用相同的链接行,它的工作方式符合我的预期。

标签: c++ linker dynamic-loading


【解决方案1】:

但是在最终的二进制文件中,相同的函数变成了:FUNC LOCAL DEFAULT

这很可能发生,因为您在链接器命令行上有一些东西告诉链接器这样做。也许你有一个链接器版本的脚本可以做到这一点?

我认为是 gc-sections 造成的

这种猜测不太可能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多