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

10

我无法在我的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'
任何想法是什么意思,以及如何解决这个问题?
干杯

似乎目标文件与链接器不兼容? - AndyG
我有gcc(SUSE Linux)4.8.5和ldd(GNU libc)2.25。我已经花了几个小时试图理解可能是什么问题。 - gabib44
3个回答

21

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

当重定位类型大于您版本的 ld 所知道的最大重定位类型时会出现"未识别的重定位"错误。目前,0x2a (R_X86_64_REX_GOTPCRELX) 是具有最大值的重定位类型; 我猜 @gabib44 的 ld 版本太老了,不知道在它之前的重定位类型(0x29R_X86_64_GOTPCRELX)。

当我使用 binutils v2.26 构建库,但在使用 binutils v2.24 的构建机器上引入该库时,我自己也遇到了这个问题。

解决方法是要么使用旧版本的binutils套件构建要链接的库,要么升级想要链接该库的机器上的 ld 版本。


1
只是为了补充细节:为了升级Ubuntu中的ld,我安装了binutils-2.26,但这只添加了一个ld-2.26二进制文件。我必须处理符号链接,以便默认情况下使用它。 - jmmut

4
我在另一篇帖子中找到了这个:
[...编译时会出现以下错误:
/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] 的提示(在我离线时让我知道 optiz0r 的回复),问题得到了解决。

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

对我有效。


1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接