Centos 下 ld 链接器版本更新

最近在编译一个工程的时候, 偶然遇到一个报错

/usr/bin/ld: 某个库 : unrecognized relocation (0x2a) in section `.text`
/usr/bin/ld: final link failed: 错误的值

这个错大致意思在符号链接过程中, 链接失败, 而出现下面这样的情况,大概率就是链接器版本不正确导致的
ldGUN 下提供的库链接器, 通过和同事比较了一下 ld 工具的版本后, 果然是我的版本较低, 所以接下来主要就是更新 ld 这个工具

# 查看旧版本
ld -v
# 以我的为例,当前系统中 ld 的版本为
GNU ld version 2.25.1-31.base.el7

首先确定需要的版本,到 http://ftp.gnu.org/gnu/binutils 网站下寻找自己需要的版本
举个例子,我想将原来的 2.25.1 更新成 2.26.1 版本,下载源码

# 切换路径,我一般就是在 `root` 路径下直接操作
cd /root

# 下载 2.26.1 版本对应源码压缩包
wget http:#ftp.gnu.org/gnu/binutils/binutils-2.26.1.tar.gz

# 解压缩到当前路径
tar xvf binutils-2.26.1.tar.gz 

# 切换工作目录
cd ./binutils-2.26.1

# 通过 configure 生成 makefile 文件,以及设置 make install 时的安装路径
./configure --prefix=/root/binutils-2.26.1/build

# 编译
make -j

# 导出编译生成文件
make install

# 配置路径到系统环境变量中
# vi /etc/profile 追加 export PATH=... 也可以 
# 这样可以确保机器重启后,导入的环境变量不会被重置
echo  "export PATH=/root/binutils-2.26.1/build/bin:$PATH" >> /etc/profile.d/localld.sh
source /etc/profile.d/localld.sh

# 验证
ld -v

# 结果显示 ld 工具版本更新成功
GNU ld (GNU Binutils) 2.26.1

最后需要注意, 找好自己需要更新的版本以及最后导入环境变量的写法

提到链接器, 推荐一本书 《程序员的自我修养-链接装载与库》, 还是很值得在看看~

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会偷懒的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值