我无法在我的 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 的问题是使用旧版本的 ld
链接一个用新版本构建的库。
当重定位类型大于您的 ld
版本中最大的已知重定位类型时,会出现“无法识别的重定位”。 0x2a
(R_X86_64_REX_GOTPCRELX
) 是目前值最大的重定位类型;我猜 @gabib44 的 ld
已经老到不知道那个之前的重定位类型(0x29
,R_X86_64_GOTPCRELX
)。
当我使用 binutils v2.26(知道重定位 0x2a
)构建库时,我自己遇到了这个问题,但随后使用 binutils v2.24 将该库合并到构建机器上
修复方法是构建您想要与旧版本的 binutils 套件链接的库,或者在想要链接该库的机器上升级 ld
。
关于c++ - 无法编译 : unrecognized relocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058050/