实现Arm-Linux交叉编译遇到的问题总结

引言:

项目中我们要实现网络半实物节点的仿真,开发板中为ARM-Linux,我们通过交叉编译实现上板过程出现了几处棘手问题,后续对几处问题进行了解决,在这里进行总结,其中针对此问题:/lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found     32位的ARM所缺少文件libstdc++.so.6.28 网上很难找,我们这里便利大家,给予下载链接。

https://pan.baidu.com/s/10BpGHaI6-R75bSjeCWf8Ew

提取码:gwfo

问题:

  • No such file or directory/Segmentation fault
  • Version  'GLIBCXX_3.4.22' not found

Segmentation fault:

我们最开始进行Arm-Linux交叉编译时,对开发板中的ARM Linux版本不太清楚,错误的选择交叉编译器ARM-Linux-gcc 进行交叉编译,最开始编译的可执行文件格式为图中的32-bit LSB executable 格式当我们执行时会报错:

No such file or directory

最开始我们以为是编译的可执行文件格式不对,因为之前的vitis编译的Hello world 可以运行的程序的可执行文件格式为32-bit LSB shared object 因此当我们利用ARM-Linux-gcc编译器编译可执行文件格式为32-bit LSB shared object后报错:

Segmentation fault

最后经过多方面的学习,发现可以运行的程序的加载器格式为

ld-linux-armhf.so.3

是我们选择的交叉编译器的选择错误:

arm-linux-gcc 编译出的加载器为:

ld-linux.so.3

arm-linux-gnueabihf-gcc 编译出的加载器为:

ld-linux-armhf.so.3

因此我们重新安装了arm-linux-gnueabihf-gcc编译器后,测试程序Hello World程序可以正常执行。

Version  'GLIBCXX_3.4.22' not found:

后续我们对我们的代码利用arm-linux-gnueabihf-gcc进行交叉编译放到开发板上执行时有一次出现了新的问题:

Version  'GLIBCXX_3.4.22' not found

针对这个问题网上有两种解决办法:

https://www.cnblogs.com/xxd-qyr/p/11014491.html

这里,这位博主针对两种问题有了明确的讲解和解决办法

  1. 原因1:已经安装过高版本但未软连接
  2. 原因2:版本低

我们在这里主要是版本低,我们的gcc版本中没有包含我们需要的GLIBCXX_3.4.22

我们需要的这个版本通过更新指令没有得到解决,只有去网上寻找对应的libstdc++.so.版本,在这里我们最开始找到了一个包含GLIBCCXX_3.4.22 的一个版本libstdc++.so.6.0.13 但是确实64位的,这里给出这位大方博主的链接,如果有64位问题的朋友,问题可以得到解决。

https://blog.csdn.net/weixin_43227196/article/details/110946066

我们最终经过千辛万苦找到了libstdc++.so.6.28 这个版本对32位兼容,含有3.4.22版本。

 问题得到解决,代码在开发板上顺利执行。

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值