centos 7.6 libstdc++.so.6 软链接库升级

at 2年前  ca Linux  pv 2931  by touch  

 error while loading shared libraries: libmvec.so.1: cannot open shared object file: No such file or directory

原先是在SUSE12 和EulerOS2.9的机器上演练过数次,客户临阵换枪,给了一台centos7.6的mini版本的机器,导致部署在上面的人脸识别的sdk包启动直接原地爆炸,瞬间起飞,灵魂出窍,神游天外,投胎转世......

百度了一下五花八门的原因都有

  1. gcc版本过低,建议升级(没尝试过)

  2. centos7自带的gcc版本是4.8,通过gcc官网安装手册可知,依赖文件太多了,手动升级安装太繁琐。可以通过安装devtoolset的方式间接升级gcc至高版本(内网环境,不可行)

本地模拟现场环境,下载了centos7.6

将另外一台机器上的libmvec.so 复制到目标机器的 /usr/lib64/ 路径下

报错:

[root@centosb aw_kunpeng_sdk.v3.11.1]# ./attendance: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by ./attendance)
./attendance: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./attendance)
./attendance: /lib64/libstdc++.so.6: version `CXXABI_1.3.8' not found (required by /data01/aw_kunpeng_sdk.v3.11.1/libawface.so)
./attendance: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by /data01/aw_kunpeng_sdk.v3.11.1/libawface.so)
./attendance: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /data01/aw_kunpeng_sdk.v3.11.1/libawface.so)

报错信息解析:

出现这个错误是因为CentOS7当前版本默认的GCC的版本太老,里面的动态链接库没有GLIBCXX_3.4.21

执行命令

strings /usr/lib64/libstdc++.so.6 | grep GLIBC

可以看到报错的动态库链接缺失

解决方案如下

cd /usr/local/lib64/
# 下载最新版本的`下载最新版本的libstdc.so_.6.0.26`
wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
# 解压
unzip libstdc.so_.6.0.26.zip
# 将下载的最新版本拷贝到 /usr/lib64
cp libstdc++.so.6.0.26 /usr/lib64
cd  /usr/lib64
# 查看 /usr/lib64下libstdc++.so.6链接的版本
ls -l | grep libstdc++
# 删除原先的软连接(不放心可以备份)
rm libstdc++.so.6
# 使用最新的库建立软连接
ln -s libstdc++.so.6.0.26 libstdc++.so.6
# 查看新版本,成功
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX


版权声明

本文仅代表作者观点,不代表码农殇立场。
本文系作者授权码农殇发表,未经许可,不得转载。

 

扫一扫在手机阅读、分享本文

已有0条评论