无法编译:无法识别的重定位

新手上路,请多包涵

我无法在我的 linux 电脑上编译任何东西。我不知道为什么,可能我已经安装了一些软件包并弄得一团糟。我已经卸载并重新安装了 gcc 和其他软件包,但没有好消息.. 仍然是这个问题。

这是消息:

 /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../x86_64-suse-
linux/bin/ld: /usr/lib64/gcc/x86_64-suse-linux/4.8/../../../../lib64/crt1.o: unrecognized relocation (0x29) in section `.text'

知道这是什么意思以及如何解决这个问题吗?

干杯

原文由 gabib44 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 709
1 个回答

对于遇到此问题的其他任何人:我认为@gabib44 的问题是使用旧版本的 ld 来链接已使用较新版本构建的库。

当重定位类型大于您的版本 ld 中最大的已知重定位类型时,会发生“无法识别的重定位”。 0x2a ( R_X86_64_REX_GOTPCRELX ) 是目前价值最大的重定位类型;我猜@gabib44 的 ld 已经足够老了,以至于不知道之前的重定位类型( 0x29R_X86_64_GOTPCRELX )。

我自己在使用 binutils v2.26 构建库时遇到了这个问题(它知道重定位 0x2a ),然后使用 binutils v2.24 将该库合并到构建机器上

修复方法是构建要与旧版本的 binutils 套件链接的库,或者在要链接该库的机器上升级 ld

原文由 Jake Molnar 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题