我无法在我的 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 许可协议
对于遇到此问题的其他任何人:我认为@gabib44 的问题是使用旧版本的
ld
来链接已使用较新版本构建的库。当重定位类型大于您的版本
ld
中最大的已知重定位类型时,会发生“无法识别的重定位”。0x2a
(R_X86_64_REX_GOTPCRELX
) 是目前价值最大的重定位类型;我猜@gabib44 的ld
已经足够老了,以至于不知道之前的重定位类型(0x29
,R_X86_64_GOTPCRELX
)。我自己在使用 binutils v2.26 构建库时遇到了这个问题(它知道重定位
0x2a
),然后使用 binutils v2.24 将该库合并到构建机器上修复方法是构建要与旧版本的 binutils 套件链接的库,或者在要链接该库的机器上升级
ld
。