问题描述

CentOS安装新版本(10.2.0)的g++后,编译程序后执行出现问题如下

[root@VM-0-9-centos xltest]# ./a.out
./a.out: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by ./a.out)

解决办法

新版本文件在/usr/local/lib64/ 内,而查找是从/usr/lib64 先的,因此最好是将新文件拷贝到/usr/lib64 并创建软连接。

[root@VM-0-9-centos xltest]# cp /usr/local/lib64/libstdc++.so.6  /usr//lib64

问题分析

  1. 执行命令,查看libstdc++.so.6 文件确实不含3.4.21
[root@VM-0-9-centos xltest]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.19
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_DEBUG_MESSAGE_LENGTH
  1. 查找一下系统中安装的相关库
[root@VM-0-9-centos xltest]# find / -name "libstdc++.so.6*"
...
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.28-gdb.py
/usr/local/lib64/libstdc++.so.6.0.28
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
/usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.19

试着看一下哪个libstdc++.so.6.0.28 中包含 GLIBCXX_3.4.21

[root@VM-0-9-centos xltest]# strings /usr/local/lib64/libstdc++.so.6 | grep GLIBCXX
...
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBCXX_3.4.26
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_DEBUG_MESSAGE_LENGTH
_ZNKSt14basic_ifstreamIcSt11char_traitsIcEE7is_openEv@GLIBCXX_3.4
_ZNSt13basic_istreamIwSt11char_traitsIwEE6ignoreEv@@GLIBCXX_3.4.5
_ZNKSbIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@GLIBCXX_3.4
...
  1. 好的找到了,做拷贝和替换
[root@VM-0-9-centos xltest]# cp /usr/local/lib64/libstdc++.so.6  /usr//lib64    
cp: overwrite ‘/usr//lib64/libstdc++.so.6’? y

可以了。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐