CentOS7升级GCC版本,解决version `GLIBCXX_3.4.21‘ not found

最近在运行一个Linux平台的程序的时候启动报错了:

/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found

出现这个错误是因为CentOS7当前版本默认的GCC的版本太老,里面的动态链接库没有GLIBCXX_3.4.21。接下来就是我分析,解决这个问题的过程,记录下来给别人也给自己做个记录

1. 确认系统中已有的 libstdc++.so.6 文件

首先执行命令检查动态库

$ strings /usr/lib64/libstdc++.so.6 | grep GLIBC

输出结果如下:

[root@localhost lib]# strings /usr/lib64/libstdc++.so.6 |grep GLIBC

  1. GLIBCXX_3.4
  2. GLIBCXX_3.4.1
  3. GLIBCXX_3.4.2
  4. GLIBCXX_3.4.3
  5. GLIBCXX_3.4.4
  6. GLIBCXX_3.4.5
  7. GLIBCXX_3.4.6
  8. GLIBCXX_3.4.7
  9. GLIBCXX_3.4.8
  10. GLIBCXX_3.4.9
  11. GLIBCXX_3.4.10
  12. GLIBCXX_3.4.11
  13. GLIBCXX_3.4.12
  14. GLIBCXX_3.4.13
  15. GLIBCXX_3.4.14
  16. GLIBCXX_3.4.15
  17. GLIBCXX_3.4.16
  18. GLIBCXX_3.4.17
  19. GLIBCXX_3.4.18
  20. GLIBCXX_3.4.19
  21. GLIBC_2.3
  22. GLIBC_2.2.5
  23. GLIBC_2.14
  24. GLIBC_2.4
  25. GLIBC_2.3.2
  26. GLIBCXX_DEBUG_MESSAGE_LENGTH

可以看出我的最高版本是3.4.19。

如果输出中没有 GLIBCXX_3.4.21,说明需要升级。

输入命令查看libstdc++.so.6的位置

$ find / -name libstdc++.so.6*

输出结果如下:

  1. [root@localhost lib]# find / -name “libstdc++.so*”
  2. /root/Downloads/vmware-tools-distrib/lib/lib64/libstdc++.so.6
  3. /root/Downloads/vmware-tools-distrib/lib/lib64/libstdc++.so.6/libstdc++.so.6
  4. /root/Downloads/vmware-tools-distrib/lib/lib32/libstdc++.so.6
  5. /root/Downloads/vmware-tools-distrib/lib/lib32/libstdc++.so.6/libstdc++.so.6
  6. /usr/lib/gcc/x86_64-redhat-linux/4.8.2/32/libstdc++.so
  7. /usr/lib/gcc/x86_64-redhat-linux/4.8.2/libstdc++.so
  8. /usr/lib/vmware-tools/lib64/libstdc++.so.6
  9. /usr/lib/vmware-tools/lib64/libstdc++.so.6/libstdc++.so.6
  10. /usr/lib/vmware-tools/lib32/libstdc++.so.6
  11. /usr/lib/vmware-tools/lib32/libstdc++.so.6/libstdc++.so.6
  12. /usr/lib/libstdc++.so.6
  13. /usr/lib/libstdc++.so.6.0.19
  14. /usr/lib64/libstdc++.so.6.0.19
  15. /usr/lib64/libstdc++.so.6
  16. /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.py
  17. /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyc
  18. /usr/share/gdb/auto-load/usr/lib64/libstdc++.so.6.0.19-gdb.pyo
  19. /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.py
  20. /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyc
  21. /usr/share/gdb/auto-load/usr/lib/libstdc++.so.6.0.19-gdb.pyo
  22. /opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/32/libstdc++.so
  23. /opt/rh/devtoolset-7/root/usr/lib/gcc/x86_64-redhat-linux/7/libstdc++.so

可见我的最高版本文件是libstdc++.so.6.0.19

接下来就需要进行升级了,首先下载GCC源码,选择合适自己的版本,我下载的7.3.0。

2. 下载并编译安装更高版本的 libstdc++

2.1 下载 GCC 源码

这是GCC下载地址,里面有各个版本的源码 http://ftp.gnu.org/gnu/gcc/

wget https://ftp.gnu.org/gnu/gcc/gcc-7.3.0/gcc-7.3.0.tar.gz
tar -zxvf gcc-7.3.0.tar.gz
cd gcc-7.3.0

2.2 安装依赖

安装编译环境

sudo yum groupinstall "Development Tools"
sudo yum install gmp-devel mpfr-devel libmpc-devel zlib-devel

2.3 编译并安装

然后就是进入源码目录开始进行编译了,下面是连续的几个命

./contrib/download_prerequisites
mkdir build && cd build
./configure --prefix=/usr/local/gcc-7.3.0 --enable-languages=c,c++ --disable-multilib
make -j$(nproc)
sudo make install

 

生成make文件并且编译,此处编译时间比较久

3. 替换系统中的 libstdc++.so.6 文件

查找编译gcc时生成的最新动态库:
# find / -name "libstdc++.so*"
将新编译的 libstdc++.so.6 文件替换系统中的旧文件,并更新软链接:
bash复制
sudo cp /usr/local/gcc-12.3.0/lib64/libstdc++.so.6.0.30 /usr/lib64/
sudo rm /usr/lib64/libstdc++.so.6
sudo ln -s /usr/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6
sudo ldconfig

4. 验证升级是否成功

检查是否包含 GLIBCXX_3.4.21
bash复制
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
如果输出中包含 GLIBCXX_3.4.21,则说明升级成功。

 

本文来自网络,不代表本站立场,转载请注明出处:万道一,Wonder One » CentOS7升级GCC版本,解决version `GLIBCXX_3.4.21‘ not found
莫要搞事情哦
你喜欢的人刚好也未喜欢你
张学友刘德华邓紫琪已关注
赞(0) 打赏

赏点小费吧客倌

微信扫一扫打赏