Centos 7.9 GLIBC GCC 升级
建议不要升,直接Centos 7 升 Centos 8
系统版本信息
cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
安装 GCC
清华源
https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/
选择合适的版本,我这里选择的是 gcc-12.3.0.tar.gz
具体步骤
# 下载
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-12.3.0/gcc-12.3.0.tar.gz
# 解压
tar -zxvf gcc-12.3.0.tar.gz
cd gcc-12.3.0/
# 下载额外的包(可能时间比较长)
./contrib/download_prerequisites
# 编译
./configure --enable-checking=release --disable-multilib
make -j12
# 安装
sudo make install -j12
安装 GLIBC
安装前的准备
安装 bison
sudo yum install bison -y
安装 make
这里是源码安装,选择make 4.3,不要选择make 4.4 可能会卡住
# 下载
wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
# 解压
tar -zxvf make-4.3.tar.gz
cd make-4.3
# 编译
./configure
make -j12
# 安装
sudo make install -j12
# 替换
sudo /usr/local/bin/make /usr/bin/make
GLIBC 正式安装
选择的是 glibc 2.28 版本
# 下载
git clone https://mirrors.tuna.tsinghua.edu.cn/git/glibc.git
cd glibc
git checkout -b glibc-2.28 glibc-2.28
# 编译(我的gcc是 12.3, 需要加--disable-werror选项,--enable-obsolete-nsl 是为了解决后面的问题而加的)
mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin --disable-werror --enable-obsolete-nsl
make -j12
# 安装
# /usr/bin/ld: cannot find -lnss_test2 问题的解决方案
diff --git a/scripts/test-installation.pl b/scripts/test-installation.pl
index b2e4ba7646..2b70f11c1b 100755
--- a/scripts/test-installation.pl
+++ b/scripts/test-installation.pl
@@ -125,7 +125,7 @@ while (<SOVERSIONS>) {
next if ($build_mathvec == 0 && $name eq "mvec");
if ($name ne "nss_ldap" && $name ne "db1"
&& $name ne "thread_db"
- && $name ne "nss_test1" && $name ne "libgcc_s") {
+ && $name ne "nss_test1" && $name ne "nss_test2" && $name ne "libgcc_s") {
$link_libs .= " -l$name";
$versions{$name} = $version;
}
# undefined reference to ‘_nsl_default_nss@GLIBC_PRIVATE’的解决方案就是前面的--enable-obsolete-nsl 选项
sudo make install -j12
# 替换
sudo ln -s /usr/lib64/libc-2.28.so /usr/lib64/libc.so.6
sudo ln -s /usr/local/lib64/libstdc++.so.6.0.30 /usr/lib64/libstdc++.so.6