【Linux-编译器gcc/glibc升级】CentOS7.9使用NodeJS18时报错/lib64/libm.so.6: version `GLIBC_2.27‘ not found

【Linux-编译器gcc/glibc升级】CentOS7.9使用NodeJS18时报错/lib64/libm.so.6: version `GLIBC_2.27' not found

文章已收录至https://lichong.work,转载请注明原文链接。

ps:欢迎关注公众号"Fun肆编程"或添加我的私人微信交流经验🤝

背景

最近做一个前端项目Jenkins的自动构建时,项目使用nodejs18,正好公司Jenkins节点有些不够用,就用了台资源空余比较多的服务器用于充当Jenkins节点,配置好NodeJS路径后,构建时产生报错如下:

text 复制代码
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)

分析原因

使用strings命令查看当前glibc支持的版本

shell 复制代码
# 使用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.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包,然后进行配置、编译、安装、挂载这些步骤,但这样做风险还是有点大的,特别是不太懂的小白很容易把服务器搞崩。

推荐方式

这里推荐先使用devtoolset工具进行自动安装,操作步骤如下:

  1. 安装 devtoolset 8:Devtoolset 8 包括更新的 GCC 和 GLIBC,可以满足 Node.js 18 的要求。使用以下命令安装 Devtoolset 8:
shell 复制代码
sudo yum install centos-release-scl
sudo yum install devtoolset-8
  1. 激活 devtoolset 8:安装完成 Devtoolset 8 后,需要激活 Devtoolset 8 才能使用更新的 GCC 和 GLIBC。使用以下命令激活 Devtoolset 8:
shell 复制代码
scl enable devtoolset-8 bash
  1. 更新 GCC 和 GLIBC:使用 Devtoolset 8 提供的更新版本替换系统自带的 GCC 和 GLIBC。使用以下命令更新:
shell 复制代码
sudo yum install devtoolset-8-toolchain
sudo scl enable devtoolset-8 bash
  1. 验证更新版本:使用以下命令验证 GCC 和 GLIBC 版本:
shell 复制代码
gcc --version
ldd --version

如果显示的 GCC 版本为 8.x.x,并且显示的 GLIBC 版本为 2.28 或更高版本,则说明已成功更新。

  1. 再执行node -v命令来看看是否还有报错?

踩坑记录

执行ldd --version后发现glibc还是2.17版本,所以需要手动升级了,附上手动升级glibc的步骤:

  1. 下载 GLIBC 源码:可以从官方网站或者清华镜像下载 GLIBC 的源码包,例如 glibc-2.28.tar.gz(不建议装太新的)。
  2. 解压源码包:使用 tar 命令解压源码包:
shell 复制代码
tar -xzf glibc-2.28.tar.gz
  1. 编译和安装:切换到源码目录并使用 configure 和 make 命令编译和安装 GLIBC:
shell 复制代码
cd glibc-2.28
mkdir build
cd build
../configure --prefix=/usr
make
sudo make install
  1. 安装成功。

文章已收录至https://lichong.work,转载请注明原文链接。

ps:欢迎关注公众号"Fun肆编程"或添加我的私人微信交流经验🤝
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~往期精选🪶~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

【Docker】入门教程-基本概念解读
【前端-React Native】移动端原生开发整合React Native Elements教程-安卓示例
【前端-开发环境】使用NVM实现不同nodejs版本的自由切换(NVM完整安装使用手册)
【前端-NPM私服】内网使用verdaccio搭建私有npm服务器
【前端-IE兼容】Win10和Win11使用Edge调试前端兼容IE6、IE7、IE8、IE9、IE10、IE11问题
【前端-工程化】React项目工程化记录-内置项目活文档(老项目升级优化-集成Hosky/ESLint/Prettier-升级Webpack/Babel/NodeSass/React)
【工具-TWRP-frp-Termux】旧手机暴改成免费云服务器-MIUI刷TWRP安装magisk获取root
【工具-Shell脚本】java程序产品包模板-linux和windows通用shell启动停止脚本(无需系统安装Java运行环境)
【工具-Nginx】从入门安装到高可用集群搭建
【工具-Nginx】Nginx高性能通用配置文件-注释版-支持防刷限流、可控高并发、HTTP2、防XSS、Gzip、OCSP Stapling、负载、SSL
【工具-WireShark】网络HTTP抓包使用教程
【后端-maven打包】通过profile标签解决同时打jar包 war包需求
【架构-DDD】使用领域驱动设计-互联网未来架构设计之道(一)
【后端-SpringCache】基于Spring Cache封装一个能够批量操作的Redis缓存记录下踩坑历程(pipeline或mget封装)
【后端-SkyWalking】SkyWalking前后端开发环境搭建详细教程步骤-6.x/7.x/8.x版本通用-插件二次开发利器(一)
【后端-Quartz】Springboot整合Quartz支持集群环境-设计业务与框架分离及实现定时任务调度

✨欢迎为耿直少年点赞、关注、收藏!!!

👇👇👇

相关推荐
荣光波比几秒前
Nginx 实战系列(七)—— Nginx一键安装脚本详解
运维·nginx·自动化·云计算
书源8 分钟前
灵活性和可维护性,被严重低估的编程原则
前端·javascript·vue.js
努力学习的小廉10 分钟前
深入了解linux系统—— 线程同步
linux·服务器·数据库·算法
前端啵啵猪13 分钟前
useCallback 和 useMemo,什么时候用才是有效的?
前端·react.js
sinat_6020353617 分钟前
模块与包的导入
运维·服务器·开发语言·python
鲸屿19520 分钟前
Ansible之playbook
服务器·网络·ansible
2301_8101545521 分钟前
VM中CentOS 7密码重置
linux·运维·centos
星哥说事24 分钟前
跨平台开源笔记神器,用DeepSeek写笔记 , 效率翻倍
前端
zhaqonianzhu28 分钟前
Linux GPIO 使用 Pinctrl 及 Gpiolib 通俗详解
linux·安卓