下载的CentOS镜像CentOS-7-x86_64-Minimal-2009.iso
自带gcc 4.8.5和g++ 4.8.5版本,本文记录将其更新至12.1.0的操作。
官方文档:https://gcc.gnu.org/install/
更新方法
1. 下载最新的源码包并解压缩
gcc-12.1.0.tar.gz 可在该地址寻找自己需要的版本Index of /gnu/gcc
bash
wget http://ftp.gnu.org/gnu/gcc/gcc-12.1.0/gcc-12.1.0.tar.gz
# 腾讯软件源 https://mirrors.cloud.tencent.com/gnu/gcc/gcc-12.1.0/gcc-12.1.0.tar.gz
tar -zxvf gcc-12.1.0.tar.gz
2.下载依赖及配置文件
bash
yum -y install bzip2 gcc-c++
cd gcc-12.1.0
./contrib/download_prerequisites
3. 配置
bash
mkdir build && cd build
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib -prefix=/usr/local
# –enable-languages表示你要让你的gcc支持那些语言,
# –disable-multilib不生成编译为其他平台可执行代码的交叉编译器。
# –disable-checking生成的编译器在编译过程中不做额外检查,
# 也可以使用–enable-checking=xxx来增加一些检查
4. 编译
bash
make -j $(nproc)
#这一步需要时间非常久 此处让make最多$(nproc)个编译命令同时运行,加快编译速度
5. 安装
bash
make install
6. 验证gcc和g++版本
bash
[root@centos-llvm ~] % gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 12.1.0 (GCC)
[root@centos-llvm ~] % g++ -v
使用内建 specs。
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/12.1.0/lto-wrapper
目标:x86_64-pc-linux-gnu
配置为:../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 12.1.0 (GCC)
# 如果显示的gcc版本仍是以前的版本,就需要重启系统;
# 或者可以查看gcc的安装位置:which gcc;
# 然后再查看版本 /usr/local/bin/gcc -v
# 确定以及配置成功后可以将原先的版本删除
7. 删除旧版本
bash
yum -y remove gcc g++
8. 配置新版本全局可用
bash
ln -s /usr/local/bin/gcc /usr/bin/gcc
ln -s /usr/local/bin/g++ /usr/bin/g++
ln -s /usr/local/bin/c++ /usr/bin/c++
9. 更新动态库
bash
#查看当前的动态库
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
rm -f /usr/lib64/libstdc++.so.6
ln -s /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6
#查看更新后的动态库
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
# 安装后的动态库会位于/usr/local/lib64目录下,
# 其他版本在该目录下寻找对应的动态库libstdc++.so.6.X.XX