【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路径后,构建时产生报错如下:

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.5GLIBC_2.2.6GLIBC_2.3GLIBC_2.3.2GLIBC_2.3.3GLIBC_2.3.4GLIBC_2.4GLIBC_2.5GLIBC_2.6GLIBC_2.7GLIBC_2.8GLIBC_2.9GLIBC_2.10GLIBC_2.11GLIBC_2.12GLIBC_2.13GLIBC_2.14GLIBC_2.15GLIBC_2.16GLIBC_2.17GLIBC_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:
sudo yum install centos-release-sclsudo yum install devtoolset-8
  1. 激活 devtoolset 8:安装完成 Devtoolset 8 后,需要激活 Devtoolset 8 才能使用更新的 GCC 和 GLIBC。使用以下命令激活 Devtoolset 8:
scl enable devtoolset-8 bash
  1. 更新 GCC 和 GLIBC:使用 Devtoolset 8 提供的更新版本替换系统自带的 GCC 和 GLIBC。使用以下命令更新:
sudo yum install devtoolset-8-toolchainsudo scl enable devtoolset-8 bash
  1. 验证更新版本:使用以下命令验证 GCC 和 GLIBC 版本:
gcc --versionldd --version

如果显示的 GCC 版本为 8.x.x,并且显示的 GLIBC 版本为 2.28 或更高版本,则说明已成功更新。
5. 再执行node -v命令来看看是否还有报错?

踩坑记录

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

  1. 下载 GLIBC 源码:可以从官方网站或者清华镜像下载 GLIBC 的源码包,例如 glibc-2.28.tar.gz(不建议装太新的)。
  2. 解压源码包:使用 tar 命令解压源码包:
tar -xzf glibc-2.28.tar.gz
  1. 编译和安装:切换到源码目录并使用 configure 和 make 命令编译和安装 GLIBC:
cd glibc-2.28mkdir buildcd build../configure --prefix=/usrmakesudo 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支持集群环境-设计业务与框架分离及实现定时任务调度

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