【Linux-编译器gcc|glibc升级】CentOS7.x使用高版本NodeJS时报错解决方案
# 背景
最近做一个前端项目Jenkins的自动构建时,项目使用nodejs18,正好公司Jenkins节点有些不够用,就用了台资源空余比较多的服务器用于充当Jenkins节点,配置好NodeJS路径后,构建时产生报错如下:
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
# 分析原因
使用strings命令查看当前glibc支持的版本
# 使用strings命令查看
strings /lib64/libc.so.6 |grep GLIBC_
# 查看结果如下:
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_2.13
GLIBC_2.14
GLIBC_2.15
GLIBC_2.16
GLIBC_2.17
GLIBC_PRIVATE
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
发现只能到2.17
,执行ldd --version
也会看到glibc
版本是2.17
# 解决方案
1、升级 gcc 和 glibc 版本:注意,在升级前备份重要数据,并仔细阅读相关文档和使用说明。 2、使用其他发行版:可以考虑使用其他发行版,如 Ubuntu 或 Fedora,这些发行版默认已经安装了适用于 Node.js 18 的 gcc 和 glibc 版本。 3、使用 Node.js 16:Node.js 16 是一个长期支持版本(LTS),它需要的 gcc 和 glibc 版本要求相对较低,可能与你的系统版本兼容。您可以尝试使用 Node.js 16,它可以提供类似于 Node.js 18 的功能,并在未来几年内受到支持和更新。
# 执行步骤
我们可以手动下载gcc包和glibc包,然后进行配置、编译、安装、挂载这些步骤,但这样做风险还是有点大的,特别是不太懂的小白很容易把服务器搞崩。
1、安装 devtoolset 8:Devtoolset 8 包括更新的 GCC 和 GLIBC,可以满足 Node.js 18 的要求。使用以下命令安装 Devtoolset 8:
sudo yum install centos-release-scl
sudo yum install devtoolset-8
2
2、激活 devtoolset 8:安装完成 Devtoolset 8 后,需要激活 Devtoolset 8 才能使用更新的 GCC 和 GLIBC。使用以下命令激活 Devtoolset 8:
scl enable devtoolset-8 bash
3、更新 GCC 和 GLIBC:使用 Devtoolset 8 提供的更新版本替换系统自带的 GCC 和 GLIBC。使用以下命令更新:
sudo yum install devtoolset-8-toolchain
sudo scl enable devtoolset-8 bash
2
4、验证更新版本:使用以下命令验证 GCC 和 GLIBC 版本:
gcc --version
ldd --version
2
如果显示的 GCC 版本为 8.x.x,并且显示的 GLIBC 版本为 2.28 或更高版本,则说明已成功更新。 5、 再执行node -v命令来看看是否还有报错?
# 踩坑记录
执行ldd --version
后发现glibc
还是2.17
版本,所以需要手动升级了,附上手动升级glibc
的步骤:
1、下载 GLIBC 源码:可以从官方网站 (opens new window)或者清华镜像 (opens new window)下载 GLIBC 的源码包,例如 glibc-2.28.tar.gz(不建议装太新的)。
wget https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.28.tar.gz
2、解压源码包:使用 tar 命令解压源码包:
tar -xzf glibc-2.28.tar.gz
3、编译和安装:切换到源码目录并使用 configure 和 make 命令编译和安装 GLIBC:
cd glibc-2.28
mkdir build
cd build
../configure --prefix=/usr
make
sudo make install
2
3
4
5
6
参考文章:https://blog.csdn.net/lc1025082182/article/details/129554635
- 02
- Node与GLIBC_2.27不兼容解决方案08-19
- 03
- Git清空本地文件跟踪缓存08-13