gcc/c++ 版本不一致问题导致的

1.问题

rk3566板子的系统是ubuntu20.04 focal,   /etc/apt/source.list更换为阿里源

x86-67的pc主机系统的是ubuntu20.04  jammy     /etc/apt/source.list  更换为清华源

按照rknpu2的开发教程Rockchip_Quick_Start_RKNN_SDK_V1.5.2_CN.pdf:

交叉编译通过后(交叉编译的问题在这个文档中有记录:CSDN),把相关产生的文件通过adb push到远处的设备端,

执行命令:

./rknn_yolov5_demo ./model/RK3566_RK3568/yolov5s-640-640.rknn ./model/bus.jpg

出现错误:

./rknn_yolov5_demo: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./rknn_yolov5_demo)
./rknn_yolov5_demo: /lib/aarch64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by ./rknn_yolov5_demo)

2.分析思路

查看了很多网络资料,终于解决了问题,我下面梳理一下解决思路,主要我是通过两个步骤完成的,第一是升级rk设备端的gcc和g++版本,第二是安装GBLC_3.24


(1)   

有博主认为这是因为编译环境下的gcc及g++版本和目标板的版本不同造成的,(参考:) 因为pc端的gcc及g++都是11.4.0版本的,但是设备端的gcc和g++是9.4.0版本的。

因此我打算在目标板按照高版本的gcc及g++,并于编译环境下的gcc和g++保持一致。

(2)   

下面是设备端的查看的GLIBC的信息的指令,发现最高仅到2.30,没有GLIBC_2.34的版本, 考虑这种思路,参考

version `GLIBC_2.34‘ not found简单有效解决方法_huazhang_001的博客-CSDN博客

Ubuntu – Package Download Selection -- libc6_2.35-0ubuntu3_amd64.deb

我决定用另外的方法。

在rk3566设备端(ubuntu20.04 focal)输入:strings /lib/aarch64-linux-gnu/libc.so.6 | grep GLIBC_

在x86-64的pc端(ubuntu20.04 jammy)输入: strings /lib/x86_64-linux-gnu/libc.so.6 |grep GLIBC_

分别显示如下,可看出rk3566端的GLIBC_版本最高到2.30


 

3.解决方式

3.1 升级gcc/g++

升级g++:

  sudo apt-get install g++-11

上述指令无法安装gcc-11

于是我参考这篇文章Ubuntu升级GCC版本_quxuexi的博客-CSDN博客,来安装gcc-11.4.0

1.添加相应的源

sudo add-apt-repository ppa:ubuntu-toolchain-r/test

2.更新软件源

sudo apt-get update

3.安装最新版gcc

sudo apt-get install gcc-11.4.0

4. 配置不同版本的g++,gcc

现在设备端有两个版本的gcc及g++,所以现在开始配置gcc及g++的版本选项,参考https://www.cnblogs.com/livelab/p/13049117.html

以下命令为每个版本配置替代版本,并将优先级与之关联。默认版本是优先级最高的版本,在本例中为gcc-11

分别配置gcc-11/g++-11 及gcc-9/g++-9(这种联合配置gcc和g++的方法会出错,请使用后面分开配置的方式)

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100

--slave /usr/bin/g++ g++ /usr/bin/g++-11

--slave /usr/bin/gcov gcov /usr/bin/gcov-11

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 80

--slave /usr/bin/g++ g++ /usr/bin/g++-9

--slave /usr/bin/gcov gcov /usr/bin/gcov-9

以后,如果要更改默认版本,请使用以下update-alternatives命令:

sudo update-alternatives --config gcc

因为不小心多设置的了一次,所以gcc11有两个,这里我选择gcc-11作为我的默认版本,然后输入gcc--version命令,发现也已经是配置选项的gcc了。

如果想删除配置的gcc,可以用该命令(参考ubuntu中的update-alternatives命令_Lamar Davis的博客-CSDN博客):

sudo update-alternatives --remove gcc /usr/bin/gcc-11

我发现用上述统一配置gcc和g++的方式出错,就是master的gcc配置成功,但是g++配置无效,所以我尝试打算分开配置的方式(参考:update-alternatives: error: alternative g++ can't be slave of gcc: it is a master alternative_Longlongaaago的博客-CSDN博客),先把之前配置成功的gcc用上述方法删除。

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 80

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 80


通过升级设备端gcc和g++的版本至11.4.0后,再次执行模型的推理程序发现错误提示减少了一个.....version `GLIBCXX_3.4.29'......,另一个提示如下已经存在。好像也解决了一些问题,但不知是否多余,因为后面还有关键一步。

./rknn_yolov5_demo: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./rknn_yolov5_demo)

3.1 升级GBLC_

参考:version `GLIBC_2.34‘ not found简单有效解决方法_huazhang_001的博客-CSDN博客

(1)编辑源: sudo vi /etc/apt/sources.list

(2)添加高版本源: deb http://th.archive.ubuntu.com/ubuntu/ jammy main #添加该行

(2)添加高版本源: deb http://th.archive.ubuntu.com/ubuntu-port/  jammy main #添加该行

(3)更新源:sudo apt update   

E: Failed to fetch https://mirrors.tuna.tsinghua.edu.cn/ubuntu/dists/jammy/main/binary-arm64/Packages  404  Not Found [IP: 101.6.15.130 443]
E: Some index files failed to download. They have been ignored, or old ones used instead.

出现这个问题是因为第二步添加源的时候使用路径中   /ubuntu  ,而arm架构的平台应该用/ubuntu-ports   

参考:RK3399开发板ubuntu20.04报错 binary-arm64/Packages 404 - 知乎

(4)安装: sudo apt install libc6

然后再次查看GLIBC_的版本strings /lib/aarch64-linux-gnu/libc.so.6 | grep GLIBC_ , 可以看到已经最高到2.35版本了,

再次执行RK的demo

./rknn_yolov5_demo ./model/RK3566_RK3568/yolov5s-640-640.rknn ./model/bus.jpg

程序正常运行,问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值