问题描述
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
问题分析
- 执行命令,查看
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
- 查找一下系统中安装的相关库
[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
...
- 好的找到了,做拷贝和替换
[root@VM-0-9-centos xltest]# cp /usr/local/lib64/libstdc++.so.6 /usr//lib64
cp: overwrite ‘/usr//lib64/libstdc++.so.6’? y
可以了。