前言
眼瞅着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 来总结此文。该文章的各项步骤均已经过本人亲自验证可行。
升级前的准备
- 验证当前版本:
gcc -v
ldd --version
- 确定升级的版本 gcc4.8.5–>gcc9.3.0 glibc2.17–>glibc2.29
- 升级路径
升级和验证
- 先安装依赖
包名 用途 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
当然,根据操作系统版本或库安装的情况,具体的依赖也可以根据实际需要调整
- 升级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
以上的版本和安装目录,编译目录,都可以根据需要自己修改。不必拘泥
- 升级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/
- 升级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