【问题标题】:Unable to compile: unrecognized relocation无法编译:无法识别的重定位
【发布时间】:2017-09-05 14:57:47
【问题描述】:

我无法在我的 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'

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

干杯

【问题讨论】:

  • 看起来目标文件与链接器不兼容?
  • 我有 gcc (SUSE Linux) 4.8.5 和 ldd (GNU libc) 2.25 。我花了好几个小时试图理解它是什么

标签: c++ linux gcc opensuse ldd


【解决方案1】:

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

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

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

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

【讨论】:

  • 只是为了添加细节:在 ubuntu 中升级 ld,我安装了 binutils-2.26,但只添加了一个 ld-2.26 二进制文件。我必须处理符号链接,以便默认使用它。
【解决方案2】:

我在另一个帖子中找到了这个:

[...编译时会出现这个错误:

/usr/lib/gcc/x86_64-pc-linux-gnu/6.4.0/../../../../x86_64-pc-linux-
gnu/bin/ld: /usr/lib/gcc/x86_64-pc-linux-
gnu/6.4.0/../../../../lib64/Scrt1.o: unrecognized relocation (0x2a) in 
section `.text'

在尝试了很多事情之后,包括来自不同 Gentoo 系统的新兴二进制文件,我终于恢复了,并且感谢 optiz0r(解决我的问题)和 Ryuno-Ki[m](让我知道)解决了问题关于我注销时 optiz0rs 的回复)。

sudo binutils-config x86_64-pc-linux-gnu-2.29.1

非常简单!您的问题的解决方案可能会有所不同,但正在运行

sudo binutils-config -l

可能会显示您可以输入的版本,而不是我使用的版本...] 通过 necrophcodr » 2018 年 2 月 6 日星期二 21:24 在https://forum.sabayon.org/viewtopic.php?f=57&t=34076&p=181260#p181260

它对我有用。

【讨论】:

    【解决方案3】:

    我修复了安装 gcc-32bit 并删除了各种其他数据包

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多