赞
踩
起因是arm本地服务器下编译的程序放到远端服务器上执行,报错:
- ./Collect: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./Collect)
- ./Collect: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./Collect)
网上查资料找到命令 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 比对远端和本地差别
本地比远端多了 GLIBCXX_3.4.20 ~ GLIBCXX_3.4.24 .
yum源中找到的rpm包 libstdc++-4.8.5-44.el7.aarch64.rpm 中,只有 libstdc++.so.6.0.19 。
删除 libstdc++.so.6 软链接,重新指向 libstdc++.so.6.0.19 ,然后 strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 结果不变,libstdc++.so.6 再次查看又链接到 libstdc++.so.6.0.24 .
观察到本地服务器gcc版本为 7.3.0,远端是 4.8.5 。给本地gcc降版本。
rpm -qa | grep gcc 显示已安装 4.8.5 ,说明 7.3.0 可能是源码安装。下载 gcc-4.8.5-44.el7.aarch64.rpm 和 gcc-c++-4.8.5-44.el7.aarch64.rpm 文件,解压后,降bin目录下的文件覆盖到本地服务器 /usr/bin/ 目录下,检查gcc -v 、g++ -v 显示结果均为 4.8.5
然后重新建软链接
- [root@localhost ~]# cd /usr/lib64/
- [root@localhost lib64]# rm -f /usr/lib64/libstdc++.so /usr/lib64/libstdc++.so.6
- [root@localhost lib64]# ln -s libstdc++.so.6.0.19 libstdc++.so.6
- [root@localhost lib64]# ln -s libstdc++.so.6.0.19 libstdc++.so
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX 结果为
重新编译程序拷贝到远端服务器上,启动成功。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。