/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20‘ not found 解决

起因是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 结果为 

重新编译程序拷贝到远端服务器上,启动成功。


版权声明:本文为lx20091219原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。