检查glibc版本

1
ldd --version

安装 glibc-2.28

编辑时间可能会很长,最好找个空闲时间来升级

1
2
3
4
5
6
7
8
9
10
11
# 下载并解压 glibc-2.28
$ cd /usr/src/
$ wget https://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
$ tar -xzvf glibc-2.28.tar.gz
$ cd glibc-2.28
# 创建临时文件
$ mkdir build && cd build
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

# 这一步时, 如果发生如下错误, 则需要进行gcc & make的升级,否则进行最后一步【继续编译glibc】
These critical programs are missing or too old: make compiler

升级gcc与make

安装GLIBC所需的依赖 可以在 glibc 目录下的INSTALL中找到, 该版本需要 GCC 4.9 以上 及 make 4.0 以上

升级gcc

1
2
3
4
5
6
# 直接安装 GCC-8
$ yum install centos-release-scl-rh -y
$ yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ devtoolset-8-binutils
# 设置环境变量
$ echo "source /opt/rh/devtoolset-8/enable" >> /etc/profile
$ source /etc/profile

升级 make

1
2
3
4
5
6
7
8
9
10
11
$ wget https://ftp.gnu.org/gnu/make/make-4.3.tar.gz
$ tar -xzvf make-4.3.tar.gz
$ cd make-4.3/
# 安装到指定目录
$ ./configure --prefix=/usr/local/make
$ make
$ make install
# 创建软链接
$ cd /usr/bin/
$ mv make make.bak # backup
$ ln -sv /usr/local/make/bin/make /usr/bin/make

继续编译 glibc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 进入之前的 `~/glibc-2.28/build`目录下
$ cd /usr/src/glibc-2.28/build
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
$ make
# 此步可能会遇到报错:`Btw. the script doesn't work if you're installing GNU libc not as your`,但似乎不影响
$ make install
# 查询
$ strings /lib64/libc.so.6 | grep GLIBC
...
GLIBC_2.22
GLIBC_2.23
GLIBC_2.24
GLIBC_2.25
GLIBC_2.26
GLIBC_2.27
GLIBC_2.28
GLIBC_PRIVATE
...

问题

升级完后报错:can't set the locale; make sure $LC_* and $LANG are correct

在 CentOS 或基于 Red Hat 的系统上,locale-gen 命令并不是直接可用的,而是使用 localedef 命令来生成本地化数据。请尝试使用以下命令:

1
2
sudo yum install glibc-locale-source
sudo localedef -i en_US -f UTF-8 en_US.UTF-8

这里的命令安装了 glibc-locale-source 软件包,并使用 localedef 生成了一个基本的美国英语(en_US.UTF-8)本地化设置。可以根据需要替换 en_USUTF-8 为你想要的本地化设置。