Centos7 升级gcc/glibc/make/cmake

前言

眼瞅着Centos7的生命周期即将终结,系统默认的gcc/glibc版本又太低,而事实上,目前为止,因升级gcc/glibc导致的悲剧又依然不少见,特别是glibc从升级到宕机,几乎每隔一段时间就可以看见有网友嗝屁。所以,这里把这个基础操作步骤写出来,做个小记。

操作有风险,执行需谨慎

本人也曾经因升级glibc出过事故,后因算法需求,在多次练习后已是信手拈来,但是自己的升级过程不够规范和详细,所以在写本日记的时候,参考(ctrl+c/ctrl+v)了大神的这篇文章: https://chandrameenamohan.medium.com/building-nvidia-triton-inference-server-from-scratch-for-tensorflow-backend-873ef0a1f7f3 来总结此文。该文章的各项步骤均已经过本人亲自验证可行。

升级前的准备

  1. 验证当前版本:
gcc -v
ldd --version
  1. 确定升级的版本 gcc4.8.5–>gcc9.3.0 glibc2.17–>glibc2.29
  2. 升级路径

升级和验证

  1. 先安装依赖
    包名 用途
    wget 用于从网络下载文件
    gcc C/C++ 编译器
    gcc-c++ C++ 编译器
    zlib-devel zlib 开发库
    libcurl-devel libcurl 开发库
    openssl-devel OpenSSL 开发库
    bzip2-devel bzip2 开发库
    gmp-devel.x86_64 GNU Multiprecision Library 开发库(x86_64)
    mpfr-devel.x86_64 MPFR Library 开发库(x86_64)
    libmpc-devel.x86_64 MPC Library 开发库(x86_64)
    libSM-devel.x86_64 X.Org SM 库开发库(x86_64)
    libxml2-devel libxml2 库开发库
    gcc-gfortran.x86_64 Fortran 编译器(x86_64)
    autoconf 自动化配置脚本生成器,用于生成 Makefile 文件
    automake 自动化 Makefile 生成器,用于生成 Makefile.in 文件
    boost-devel Boost 库的开发包,用于开发 C++ 程序
    make 构建工具,用于自动化软件编译、安装、测试等工作
    patchelf 用于修改 ELF 文件的符号表和动态链接库依赖项
    bison 语法分析器生成器,用于生成 C 语言语法分析器

大概是这些依赖,yum 安装即可,建议在yum安装这些依赖之前,都安装一下epel库。

yum install epel-release.noarch -y
yum install wget gcc gcc-c++ zlib-devel libcurl-devel openssl-devel bzip2-devel gmp-devel.x86_64 mpfr-devel.x86_64 libmpc-devel.x86_64 libSM-devel.x86_64 libxml2-devel autoconf automake boost-devel make patchelf bison -y

当然,根据操作系统版本或库安装的情况,具体的依赖也可以根据实际需要调整

  1. 升级gcc到9.3.0
mkdir gcc-build 

cd gcc-build 

GCC_VERSION=9.3.0

# 创建安装目录并进到目录里。 
wget https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.gz
#下载指定的gcc版本,这里是9.3.0 
tar xzvf gcc-${GCC_VERSION}.tar.gz 
#解压
mkdir obj.gcc-${GCC_VERSION}
# 创建编译时目录
cd gcc-${GCC_VERSION}
# 进入到解压后的gcc源码目录,执行download_prerequisites脚本下载编译前的准备文件
./contrib/download_prerequisites

cd ../obj.gcc-${GCC_VERSION}
# 去到与gcc源码同级的obj.gcc-版本目录下开始进行编译安装
../gcc-${GCC_VERSION}/configure — disable-multilib — enable-languages=c,c++
# 上面是编译参数
make -j 4 # 编译进程数,建议与cpu核心数相等即可
make install

以上的版本和安装目录,编译目录,都可以根据需要自己修改。不必拘泥

  1. 升级make 因为glibc2.29 需要make4.3及以上版本,所以需要升级make
wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar xf make-4.3.tar.gz
cd make-4.3
./configure — prefix=/usr/local
make 
make install

这里没有什么特殊的,记得make被安装在了/usr/local下面,安装后yum remove make删除老版本的make,并修改环境变量或软链接/usr/local/bin 或/usr/local/sbin下的make到/usr/bin/ /usr/sbin/

  1. 升级glibc
wget https://ftp.gnu.org/gnu/glibc/glibc-2.29.tar.gz
tar xf glibc-2.29.tar.gz
cd glibc-2.29
mkdir glibc-build
cd glibc-build
../configure — prefix=/usr && /usr/local/bin/make
/usr/local/bin/make install

这里需要注意的是,make需要使用升级后的 其他就没有什么特别的了。

验证

ldconfig
gcc --version
ldd --version
Published At