CentOS 7如何编译安装升级gcc至7.5版本?

CentOS 7如何编译安装升级gcc版本?

由于配置CentOS-SCLo-scl.repo与CentOS-SCLo-scl-rh.repo后执行yum install -y devtoolset-7安装总是异常,遂决定编译安装gcc7.5

bash 复制代码
# 备份之前的yum .repo文件至 /tmp/repo_bak 目录
mkdir -p /tmp/repo_bak &&  cd /etc/yum.repo.d && /bin/mv ./*.repo /tmp/repo_bak

# 更换yum软件源为阿里云镜像源,执行脚本后一直全部回车即可
bash <(curl -sSL https://linuxmirrors.cn/main.sh)

# yum安装编译依赖
yum install -y lbzip2 gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel isl-devel

# 阿里云镜像源下载gcc 7.5版本源码包,升级至其它版本,更改URL中的7.5.0版本号即可
wget https://mirrors.aliyun.com/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz

# 解压下载源码包
tar -zxvf ./gcc-7.5.0.tar.gz
# cd进去解压源码目录
cd gcc-7.5.0


# 官方镜像源,下载速度较慢,推荐阿里云镜像源
wget https://gcc.gnu.org/pub/gcc/infrastructure/gmp-6.1.0.tar.bz2
wget https://gcc.gnu.org/pub/gcc/infrastructure/mpfr-3.1.4.tar.bz2
wget https://gcc.gnu.org/pub/gcc/infrastructure/mpc-1.0.3.tar.gz
wget https://gcc.gnu.org/pub/gcc/infrastructure/isl-0.16.1.tar.bz2

# 基于阿里云镜像源下载
wget https://mirrors.aliyun.com/gnu/gmp/gmp-6.1.0.tar.bz2
wget https://mirrors.aliyun.com/gnu/mpfr/mpfr-3.1.4.tar.bz2
wget https://mirrors.aliyun.com/gnu/mpc/mpc-1.0.3.tar.gz
wget http://ftp.ntua.gr/mirror/gnu/gcc/infrastructure/isl-0.16.1.tar.bz2

# 编译前务必执行检查是否ok,后输出 All prerequisites downloaded successfully. 为正常
./contrib/download_prerequisites  

# 创建构建目录
cd .. && mkdir -p gcc-build-7.5.0
  
#进入构建目录
cd gcc-build-7.5.0

# 生成Makefile文件,--disable-multilib参数为只编译64位库,-enable-multilib参数为同时编译32位和64位库,是否为64位操作系统可以执行uname -a查看 x86_64为64位操作系统,i386 为32位操作系统
../gcc-7.5.0/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

# -j$(nproc)启动并行编译,同时运行CPU总核数个编译任务,加速编译过程,笔者测试8核CPU编译预计20分钟
make -j$(nproc)

make install

# 以绝对路径验证的GCC版本,是否安装成功
/usr/local/bin/gcc --version


which gcc      # 查看当前 GCC 路径(通常是 /usr/bin/gcc)
gcc --version  # 查看当前GCC版本

# 重命名系统自带GCC相关文件
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
mv /usr/bin/g++ /usr/bin/g++-4.8.5
mv /usr/bin/gcov /usr/bin/gcov-4.8.5

# 注册新 GCC 到 alternatives
update-alternatives --install /usr/bin/gcc gcc /usr/local/bin/gcc 100
update-ualternatives --install /usr/bin/g++ g++ /usr/local/bin/g++ 100
update-alternatives --install /usr/bin/gcov gcov /usr/local/bin/gcov 100

# 注册旧 GCC 到 alternatives
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8.5 50
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8.5 50
update-alternatives --install /usr/bin/gcov gcov /usr/bin/gcov-4.8.5 50

# 输入1回车
update-alternatives --config gcc

# 声明新安装GCC的环境变量,注意此步必须执行,否则后续GCC编译无法调用7.5版本新的运行库
cat << 'EOF' >> ~/.bashrc
export PATH=/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=/usr/local/lib64:$LIBRARY_PATH
export C_INCLUDE_PATH=/usr/local/include
export CPLUS_INCLUDE_PATH=/usr/local/include/c++/7.5.0
EOF
source ~/.bashrc

# 以非绝对路径,查看当前GCC版本是否为7.5
cd && gcc --version
相关推荐
我是koten6 分钟前
【运维杂谈】K8s遇到Terminating的名称空间删除不了怎么办?(解决方案亲测有效)
linux·运维·服务器·云原生·kubernetes·k8s·名称空间
科技苑5 小时前
C++ CAS与ABA问题详解,无锁编程的经典陷阱怎么解决?
c++·人工智能
2601_967987378 小时前
安装 Redis 或 Redis Stack
linux·windows·redis·macos·安装
feng_you_ying_li8 小时前
linux之数据链路层
linux·网络·智能路由器
修己xj8 小时前
服务器无法解析域名?一次 DNS 配置缺失的排查与修复
运维
GeW9 小时前
高端化走到深处,是数据库和Linux的事
linux
BaiPeter10 小时前
ZPL文件预览
开发语言·c++
程序员初一10 小时前
Linux 远程桌面有四种做法
linux·ssh
程序开发阿元11 小时前
1C1G 能跑什么:把留常驻服务和不留摆进一张内存表
linux·ssh
悠仁さん12 小时前
【C++】哈希表
c++·算法·散列表