glibc 编译安装 2.28

由于 CentOS 7.9 默认的 glibc-2.17 版本过低,在安装 mvn exec:java 的时候遇到如下错误,需要升级 glibc 到 2.28 版本,以下是详细的升级过程,仅供参考。

/lib64/libc.so.6: version 'GLIBC_2.25' not found
/lib64/libc.so.6: version 'GLIBC_2.27' not found
/lib64/libc.so.6: version 'GLIBC_2.28' not found
/lib64/libstdc++.so.6: version 'CXXABI_1.3.9' not found
/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.20' not found
/lib64/libstdc++.so.6: version 'GLIBCXX_3.4.21' not found
  • 第1步,安装依赖
yum install -y -q gcc-c++ bison
  • 第2步,升级到 make 4.3,默认 3.82
cd /opt/
wget -c http://iso.sqlfans.cn/linux/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./configure --prefix=/usr/local/make
[ $? -eq 0 ] && make -j$(nproc)
[ $? -eq 0 ] && make install
cp /usr/bin/make /tmp/make.$(date +%Y%m%d%H%M%S)
rm -f /usr/bin/make
ln -sv /usr/local/make/bin/make /usr/bin/make
make --version
  • 第3步,升级到 gcc 8.2.0,默认 4.8.5(注:4C4G虚机执行make耗时35分钟
#.编译安装
yum install -y -q gcc-c++ gcc bzip2 wget

curl -L http://iso.sqlfans.cn/gcc/gcc-8.2.0.tar.gz -o /opt/gcc-8.2.0.tar.gz
tar -zxvf /opt/gcc-8.2.0.tar.gz -C /opt/ > /dev/null

cd /opt/gcc-8.2.0
wget -c http://iso.sqlfans.cn/gcc/gmp-6.1.0.tar.bz2
wget -c http://iso.sqlfans.cn/gcc/mpfr-3.1.4.tar.bz2
wget -c http://iso.sqlfans.cn/gcc/mpc-1.0.3.tar.gz
wget -c http://iso.sqlfans.cn/gcc/isl-0.18.tar.bz2

tar -jxf gmp-6.1.0.tar.bz2 && ln -s gmp-6.1.0 gmp
tar -jxf mpfr-3.1.4.tar.bz2 && ln -s mpfr-3.1.4 mpfr
tar -zxf mpc-1.0.3.tar.gz && ln -s mpc-1.0.3 mpc
tar -jxf isl-0.18.tar.bz2 && ln -s isl-0.18 isl

./configure --prefix=/usr/local/gcc/8.2.0 -enable-checking=release -enable-languages=c,c++ -disable-multilib
[ $? -eq 0 ] && make -j$(nproc)
[ $? -eq 0 ] && make install

#.配置环境变量
echo 'export PATH=/usr/local/gcc/8.2.0/bin:$PATH' > /etc/profile.d/gcc.sh
source /etc/profile.d/gcc.sh
gcc --version
  • 第4步,安装 glibc 2.28,默认 2.17
#.编译安装
cd /opt/
wget -c http://iso.sqlfans.cn/linux/glibc-2.28.tar.gz
tar xf glibc-2.28.tar.gz
cd /opt/glibc-2.28/
mkdir -p build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
[ $? -eq 0 ] && make -j$(nproc)
[ $? -eq 0 ] && make install

#.确认版本
ldd --version | grep libc
strings /lib64/libc.so.6 | grep "^GLIBC_2.28"
  • 第5步,调整 libstdc++.so.6 软链,修复 'GLIBCXX_3.4.21' not found
#.确认没有 GLIBCXX_3.4.21
[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.2
GLIBCXX_3.4.2

#.确认 libstdc++.so.6 指向的是 6.0.19
[root@localhost ~]# ll /usr/lib64/libstdc++.*
lrwxrwxrwx. 1 root root     19 Dec 14 00:33 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.19
-rwxr-xr-x. 1 root root 995840 Sep 30  2020 /usr/lib64/libstdc++.so.6.0.19

#.找到新版本gcc的 libstdc++.so.6 指向的是 6.0.25
[root@localhost ~]# ll /usr/local/gcc/8.2.0/lib64/libstdc++.so.6*
lrwxrwxrwx. 1 root root       19 Jan  7 09:22 /usr/local/gcc/8.2.0/lib64/libstdc++.so.6 -> libstdc++.so.6.0.25
-rwxr-xr-x. 1 root root 12124792 Jan  7 09:22 /usr/local/gcc/8.2.0/lib64/libstdc++.so.6.0.25
-rw-r--r--. 1 root root     2417 Jan  7 09:22 /usr/local/gcc/8.2.0/lib64/libstdc++.so.6.0.25-gdb.py

#.删除老的 libstdc++.so.6 软链,并重新指向到 6.0.25
[root@localhost ~]# rm -f /usr/lib64/libstdc++.so.6
[root@localhost ~]# ln -s /usr/local/gcc/8.2.0/lib64/libstdc++.so.6.0.25 /usr/lib64/libstdc++.so.6

#.确认 libstdc++.so.6 软链已指向到 6.0.25
[root@localhost ~]# ll /usr/lib64/libstdc++.*
lrwxrwxrwx. 1 root root     46 Jan  7 17:33 /usr/lib64/libstdc++.so.6 -> /usr/local/gcc/8.2.0/lib64/libstdc++.so.6.0.25
-rwxr-xr-x. 1 root root 995840 Sep 30  2020 /usr/lib64/libstdc++.so.6.0.19

#.确认已经有 GLIBCXX_3.4.25
[root@localhost ~]# strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX_3.4.2
GLIBCXX_3.4.2
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
Copyright © www.sqlfans.cn 2024 All Right Reserved更新时间: 2025-01-07 09:38:55

results matching ""

    No results matching ""