系统自带的编译器版本太低,可能对c++20和c++17支持较少,升级一下比较好用。
#安装额外软件源
sudo yum install epel-release
yum update && yum upgrade
#更新软件包,升级软件
yum -y install wget bzip2 gcc-c++ zstd zlib gcc cmake
#下载依赖
mkdir /opt/gcc && cd /opt/gcc
#创建安装目录
wget http://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.gz
#从gcc官网下载最新的版本,目前的12.2.0
tar -zxvf gcc-12.2.0.tar.gz
#解压
cd /opt/gcc/gcc-12.2.0
#进入目录
./contrib/download_prerequisites
#下载gcc的依赖软件包,有四个软件包,一定要下载完全,不然编译会出错,如果下载较慢也可以手动下载!!!
#网址这里 http://gcc.gnu.org/pub/gcc/infrastructure/
#下四个软件包 gmp-6.2.1.tar.bz2 isl-0.24.tar.bz2 mpc-1.2.1.tar.gz mpfr-4.1.0.tar.bz2
./configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
生成makefile文件
#–enable-languages表示你要让你的gcc支持那些语言,
#–disable-multilib不生成编译为其他平台可执行代码的交叉编译器。
#–disable-checking生成的编译器在编译过程中不做额外检查,
#也可以使用*–enable-checking=xxx*来增加一些检查
make
#这一步需要时间非常久 可以使用 make -j 4 让make最多运行四个编译命令同时运行,加快编译速度(建议不要超过CPU核心数量的2倍)
make install
#编译完成后安装
gcc -v
#出现的是12.2.0版本
make clean && cd && rm -rf /opt/gcc
#安装完成后清理垃圾
注意!!!可能出现下面的动态库问题!!!
#/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29' not found
#/lib64/libstdc++.so.6: version `GLIBCXX_3.4.29'下没有GLIBCXX_3.4.29这个版本,简而言之就是/lib64/libstdc++.so.6下的glibc版本太低了。
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
#可以发现,动态库中没有我们要的GLIBCXX_3.4.29
updatedb && locate libstdc++.so
#先在系统中找这个玩意,发现有一个较新的在/usr/local/lib64/libstdc++.so.6.0.30
cp /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64
#拷贝一份到/usr/lib64
ln -sf /usr/local/lib64/libstdc++.so.6.0.30 /lib64/libstdc++.so.6
#设置一个软连接
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
#这时就有3.4.30版本了
Comments NOTHING