本篇博客转载自:
关于libstdc++.so.6: version `GLIBCXX_3.4.20’ not found问题解决
1 问题描述
编译程序或运行程序时,出现类似/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found的报错。
2 问题分析
这是因为升级gcc时,生成的动态库没有替换老版本gcc的动态库,将gcc最新版本的动态库替换掉老版本的动态库即可。
3 解决步骤
- 查看GLBCXX版本
>> strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
...
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
可以看到,最高版本为3.4.13,没有对应的3.4.21
- 查看libstdc++.so.6链接的库
>> ll /usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.13 #这是libstdc++.so.6现在链接的库
- 查看系统更高版本的lib库
>> find / -name libstdc++.so.6*
/usr/lib64/libstdc++.so.6.bak
/usr/lib64/libstdc++.so.6.0.13
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.20
/usr/local/lib64/libstdc++.so.6
/usr/local/lib64/libstdc++.so.6.0.20-gdb.py
/usr/local/lib64/libstdc++.so.6.0.20 #这里有一个6.0.20版本,比libstdc++.so.6.0.13版本更高
- 查看lib库的信息
>> strings /usr/local/lib64/libstdc++.so.6.0.20 | grep GLIBCXX
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
...
GLIBCXX_3.4.19
GLIBCXX_3.4.20 #这个版本满足我们的需求
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
- 重新链接
>> cp /usr/local/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6.0.20
>> rm -f /usr/lib64/libstdc++.so.6
>> ln -s /usr/lib64/libstdc++.so.6.0.20 /usr/lib64/libstdc++.so.6