8

我在使用 gcc 3.2.3 与 binutils 2.18 链接共享库时遇到问题。当我尝试链接库时,出现以下错误:

.gnu.linkonce.t_...在.rodata节中引用:在丢弃的.gnu.linkonce.t节中定义...

我已经对此进行了大量的谷歌搜索,大多数地方似乎表明这是在 binutils 2.17 中引入的回归,后来在 2.18.50 中修复,但我很好奇是否有人知道是否有任何特定的解决方法来解决这个问题不得不接触 binutils 和 gcc。

谢谢。

4

2 回答 2

6

结果证明这是一个奇怪的结果,系统将 gcc 与不同的 binutils 不匹配。/usr/bin/gcc 正在使用(3.2.3)并且 /usr/local/bin/ld 正在使用它,因为 /usr/local/bin 在路径中 /usr/bin 的前面。当我们切换到 /usr/bin 位于路径的前面时,相应的 /usr/bin/ld 被调用(binutils 2.14),这似乎已经解决了问题。

于 2009-08-07T15:41:29.280 回答
0

这个错误被发现并报告在这里GCC bugzilla,一个专注于该错误的小测试用例在评论中提供,我发现它对不浪费时间非常有帮助。这个错误是固定的开始GCC 3.4.6

我在使用 and 时遇到了这个问题GCC 3.3.1binutils 2.15.92并且binutils 2.17.50两者都不起作用。所以,对我来说,很明显不是混合GCCbinutils版本造成了问题。

如果您必须使用旧GCC版本,您可以使用提供的此补丁H.J.并手动执行,然后再次重建您的旧版本GCC

修复没有 COMDAT 组

使用 COMDAT 组修复

检查提供的链接中显示修复的确切差异的附件。

我自己做了它并对其进行了测试,它成功地工作了,GCC 3.3.1用“没有 COMDAT 组”的第一个修复补丁,重建它并与它一起使用binutils 2.15.92and binutils 2.17.50

于 2017-03-14T10:32:55.583 回答