背景:武汉某野人项目需要远程远程支持,实施现场部署的时候突然报了这么一个错
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包启动直接原地爆炸,瞬间起飞,灵魂出窍,神游天外,投胎转世......
百度了一下五花八门的原因都有
- gcc版本过低,建议升级(没尝试过)
- 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