Centos 7.5系统编译升级Glibc-2.28全过程教程

最近在捣鼓SocialCall社交聊天APP系统,要安装Nodejs 18.16.0,奈何我服务器的 linux 内核版本较老, 貌似只支持到GLIBC_2.2.17, 而Nodejs编译需要GLIBC_2.28.

安装 glibc-2.28

# 下载并解压 glibc-2.28
$ 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

# 这一步时, 发生了错误, 提示大致为
These critical programs are missing or too old: make compiler

升级gcc与make

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

升级gcc

# 直接安装 GCC-8
$ 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

$ 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

# 进入之前的 `~/glibc-2.28/build`目录下
$ cd /root/glibc-2.28/build
$ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
$ make
$ 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
...

make过程碰到一个问题

/root/glibc-2.28/build/sysd-syscalls:2797: *** extraneous ‘endif’. Stop.

这个错误信息来自于Glibc编译系统,在编译过程中make程序在处理Makefile文件时遇到了语法错误。

错误解释:

  • /root/glibc-2.28/build/sysd-syscalls: 出错的Makefile文件路径。

  • 2797: 出错的行号。

  • *** extraneous 'endif'. Stop.: 错误的具体信息,表明在Makefile的2797行多写了一个endif,没有对应的ifdefifndef

解决方法:

  1. 打开指定的Makefile文件,即/root/glibc-2.28/build/sysd-syscalls

  2. 跳转到第2797行。

  3. 检查该行及其周围的代码,找到了多余的endif,删掉后重新执行make,一切正常

如果你不熟悉Glibc的Makefile语法,可以参考Glibc的官方文档或者查看周围的代码来找到匹配的ifdefifndef。如果Makefile是从某个版本控制系统中检出的,也可以对比修改前后的差异来找到问题。

 

原文链接:https://vuesite.cn/40085.html,转载请注明出处。
0
显示验证码
没有账号?注册  忘记密码?