centos7升级glibc
原因
查看系统内安装的glibc版本
strings /lib64/libc.so.6 | grep GLIBC

strings /lib64/libc.so.6 |grep GLIBC_

新版的node v18开始 都需要GLIBC_2.27支持,可是目前系统内却没有那么高的版本,所以需要升级
注意
升级glibc版本存在系统崩溃风险,强烈建议在升级前拍摄系统快照,以便出错时及时恢复
centos7升级glibc
下载
wget https://mirrors.cloud.tencent.com/gnu/glibc/glibc-2.34.tar.gz
解压
tar -zxvf glibc-2.34.tar.gz
查看新版本glibc安装要求,并查看自己版本是否符合需求
cd glibc-2.34
cat INSTALL | grep -E "later|newer"

查看系统版本
python -V
gcc -v
make -v
主要关注python make gcc 三个版本

配置安装目录(就在root下,因为makefile默认是在root_inatall)
cd /glibc-2.34
mkdir build && cd build
配置
--with-binutils=/usr/bin是gcc默认配置,可以通过 which gcc 命令查看gcc位置
默认
../configure --prefix=/usr CFLAGS="-Og -g -g3 -ggdb -gdwarf-4" CXXFLAGS="-Og -g -g3 -ggdb -gdwarf-4" --disable-werror --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
- 最新整理(使用这个方便查看版本)
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/local/bin
以下三个使用那个都可以--仅做参考方便理解
- 根据查询出来的gcc路径修改配置
../configure --prefix=/usr CFLAGS="-Og -g -g3 -ggdb -gdwarf-4" CXXFLAGS="-Og -g -g3 -ggdb -gdwarf-4" --disable-werror --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/local/bin
- 或者不写--with-binutils配置也会使用默认gcc
../configure --prefix=/usr CFLAGS="-Og -g -g3 -ggdb -gdwarf-4" CXXFLAGS="-Og -g -g3 -ggdb -gdwarf-4" --disable-werror --disable-profile --enable-add-ons --with-headers=/usr/include
- 最少参数配置
../configure --prefix=/usr CFLAGS="-Og -g -g3 -ggdb -gdwarf-4" CXXFLAGS="-Og -g -g3 -ggdb -gdwarf-4" --disable-werror
编译并安装
make && make install
make -j开启多线程,不然会很慢,要一个小时以上
make -j24
make -j24 2>&1 | tee build_glibc.log
查看
ll -n /usr/lib64/libstdc++.so.6
报错
很多基础命令也无法使用了 如使用ls命令
gcc: relocation error: /lib64/libc.so.6: symbol __tunable_get_val, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
执行下面命令,永久性的替换glibc
提示
不是root用户,将[/root/glibc-2.34/build] 改成自己的位置
LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/libc.so.6 /lib64/libc.so.6
LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/dlfcn/libdl.so.2 /lib64/libdl.so.2
LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/nptl/libpthread.so.0 /lib64/libpthread.so.0
LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/elf/ld-linux-x86-64.so.2 /usr/lib64/ld-linux-x86-64.so.2
LD_PRELOAD=/lib64/libc-2.34.so sln /root/glibc-2.34/build/rt/librt.so.1 /usr/lib64/librt.so.1
这个时候恢复正常
继续
make install
检查可用glibc版本
strings /lib64/libc.so.6 | grep GLIBC_

查看版本
ll -n /usr/lib64/libstdc++.so.6
lrwxrwxrwx 1 0 0 19 Feb 17 14:58 /usr/lib64/libstdc++.so.6 -> libstdc++.so.6.0.29
升级成功