c++ - 无法编译 : unrecognized relocation

标签 c++ linux gcc opensuse ldd

我无法在我的 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 已经老到不知道那个之前的重定位类型(0x29R_X86_64_GOTPCRELX)。

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

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

关于c++ - 无法编译 : unrecognized relocation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46058050/

相关文章:

c++ - 在 C++ vector 中手动执行内存重新分配

linux - Ansible copy模块不支持备份目录和目录权限

Linux SED - 保留空间 - 所有行的一个值

c++ - 在进行基准测试时防止编译器优化

C++:将数学函数及其导数分组到一个实体中

C++:使用互斥量和条件变量控制线程执行顺序

linux - 第一个 Bash 文件中的错误

c++ - gcc 问题 - 没有匹配的函数调用

gcc 总是可以生成对寄存器的字访问吗?

c++ - 用于数据传输的标准字节通信协议(protocol)