【发布时间】: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