交叉编译gcc适配host主机

问题

最近在调试供应商提供的供应链时出现了一些问题,首先,初始化过程失败,打开执行脚本追溯发现是所在目录中有libc和?暂时忘记,导致ls命令执行报错,于是编译执行失败,ldd命令查看gcc的链接库,发现有ld-linux的软链接路径是一个非本机路径,应该是sdk提供者的目录。将ls命令执行路径修改,参数作为目标路径后初始化就成功,gcc命令也能正常执行了,但是这怎么阻止一个女程序猿刨根问底的心呢?

答案

带着疑问回到了初始化脚本,大部门是一些find sed 之类的没有实质操作的命令和一些正则表达式,只是调用了一个python脚本文件,打开这个python脚本,终于谜题揭晓,它主要执行了如下操作:

  • 获取host arch
  • 根据host的类型和位数获得elf文件规则
  • 根据elf文件规则打开gcc等交叉编译可执行文件,seek到填写动态链接的位置,进行修改。建立过渡的软连接最终链接到系统对应的库。
  • 之前之所以执行不成功是因为过渡软链接使用的是绝对路径,没有找到这个绝对路径,我在想如果使用相对路径应该在相同位数的linux不重新初始化应该也不会有问题吧

感想

之前编译一个交叉编译环境的内存泄漏检测工具,里面缺少elf文件解析我库,在网上找了半天(linux主机直接安装就好,源代码网上很少)。经过这件小事看elf文件很像也没有那么难,有一定的理解之后,python居然就可以搞定。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值