2009-08-06 155 views
8

我无法链接共享库使用gcc 3.2.3与binutils 2.18。当我尝试,我得到以下错误链接库:帮助链接器failer:.gnu.linkonce.t

.gnu.linkonce.t _...第.RODATA引用:在废弃部分.gnu.linkonce.t定义...

我在这方面做了大量的谷歌搜索,大多数地方似乎表明这是一个在binutils 2.17中的回归引入,后来被固定在2.18.50,但我很好奇,如果有人知道是否有任何特殊的解决方法,而没有触摸binutils和gcc。

谢谢。

回答

6

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

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使用它。