帮助链接器failer:.gnu.linkonce.t

时间:2009-08-06 15:35:18

标签: gcc linker-errors binutils

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

<。> .gnu.linkonce.t _...在.rodata节中引用:在丢弃的部分中定义.gnu.linkonce.t ...

我已经做了相当多的谷歌搜索,大多数地方似乎表明它是binutils 2.17中的回归介绍,后来修复了2.18.50,但我很好奇是否有人知道是否有任何特定的解决方法这个问题无需触及binutils和gcc。

感谢。

2 个答案:

答案 0 :(得分: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),这似乎解决了这个问题。

答案 1 :(得分:0)

发现了这个错误,并在此处报告GCC bugzilla,在评论中提供了一个专注于错误的小测试用例,我发现这样做不会浪费时间。此错误已从GCC 3.4.6开始修复。

我在使用GCC 3.3.1binutils 2.15.92binutils 2.17.50时遇到此问题,但两者都无效。所以,对我而言,显然不是GCCbinutils版本混合造成问题。

如果您必须使用较旧的GCC版本,则可以使用H.J.提供的此修补程序并手动执行,然后重新生成旧的GCC

Fix without COMDAT group

Fix with COMDAT group

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

我自己做了并测试了它并且它成功运行,使用第一个修复“没有COMDAT组”修补GCC 3.3.1,重建它并将其与binutils 2.15.92binutils 2.17.50一起使用。