关注+星号公众号,不容错过精彩
作者:HywelStar
友情提示:升级glibc库有风险,小白请谨慎升级。
本例子:Ubuntu 18.04
目标:将glibc版本升级到最新2.28,推荐第四节
1. glibc 库介绍
2. glibc 版本查看
# 方法1 ldd 命令
ldd --version
# 方法2 libc.so.6
strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC
# 方法3 `getconf`命令
getconf GNU_LIBC_VERSION
3. 源码编译升级glibc 库
3.1 源码下载并解压
wget http://ftp.gnu.org/gnu/libc/glibc-2.34.tar.gz
tar -xzf glibc-2.34.tar.gz
cd glibc-2.34
3.2 编译安装
mkdir build
cd build
../configure --prefix=/opt/glibc-2.34
make -j4
sudo make install
编译期间可能遇到一些问题,可以查看第3.4小节问题解决和注意要点
请注意需要指定安装目录(--prefix=/opt/glibc-2.34),如果没有安装目录,在期间出现问题,系统很多命令都无法使用。
3.3 更新环境变量
创建脚本use_new_glibc.sh
!/bin/bash
export LD_LIBRARY_PATH=/opt/glibc-2.34/lib:$LD_LIBRARY_PATH
export PATH=/opt/glibc-2.34/bin:$PATH
source use_new_glibc.sh
但是!!!很遗憾出现一些问题!!!中间可能存在一些操作,关于替换或者怎样的,笔者试过会出现一些问题,最后采用更好的办法升级查看第四章节。
hywelstar@ubuntu:~/work$ source ./glibc-2.34/use_new_glibc.sh
hywelstar@ubuntu:~/work$ ldd --version
Segmentation fault (core dumped)
hywelstar@ubuntu:~/work$ ls /opt/glibc-2.34/lib
Segmentation fault (core dumped)
hywelstar@ubuntu:~/work$ /opt/glibc-2.34/bin/ldd --version
Segmentation fault (core dumped)
hywelstar@ubuntu:~/work/glibc-2.34$ gdb ls
gdb: relocation error: /lib/x86_64-linux-gnu/libpcre.so.3: symbol pthread_mutex_unlock version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference
hywelstar@ubuntu:~/work/glibc-2.34$ gdb ldd
gdb: relocation error: /lib/x86_64-linux-gnu/libpcre.so.3: symbol pthread_mutex_unlock version GLIBC_2.2.5 not defined in file libpthread.so.0 with link time reference
3.4. 问题解决和注意要点
3.4.1 gcc 缺失问题
hywelstar@ubuntu:~/work/glibc-2.34/build$ ../configure --prefix=/opt/glibc-2.34
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: in `/home/hywelstar/work/glibc-2.34/build':
解决办法:
sudo apt update
sudo apt install build-essential
3.4.2 gawk
和 bison
程序版本过旧。
解决办法:
sudo apt update
sudo apt install gawk bison
3.4.3 依赖库
sudo apt update
sudo apt install build-essential
sudo apt install gawk
sudo apt install bison
sudo apt install libc6-dev
sudo apt install libncurses5-dev
sudo apt install texinfo
sudo apt install git
4. glibc更新方法
编辑文件:/etc/apt/sources.list
添加高版本源
deb http://mirrors.aliyun.com/ubuntu/ jammy main
保存退出。
执行
sudo apt update
sudo apt install libc6
查看结果:
已经更新到了2.28版本。
5. 总结
glibc
有源码的方式和添加更新源的方式,对于这两种来说,后者会更加安全,不容易出错,但是后者对于控制版本不是很友好。如果在使用源码更新的过程中出现了问题,可以考虑通过其他第三方介质U盘等添加原本的glibc
版本的库文件进行恢复。另外建议,对于新的开源项目,不要再使用太旧版本系统了。