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

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.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-scl
sudo 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-toolchain
sudo scl enable devtoolset-8 bash

  1. 验证更新版本:使用以下命令验证 GCC 和 GLIBC 版本:
gcc --version
ldd --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.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支持集群环境-设计业务与框架分离及实现定时任务调度

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

👇👇👇

正在解决依赖关系 --> 正在检查事务 ---> 软件包 nodejs.x86_64.2.22.14.0-1nodesource 将被 安装 --> 正在处理依赖关系 glibc >= 2.28,它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 正在处理依赖关系 libm.so.6(GLIBC_2.27)(64bit),它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 正在处理依赖关系 libstdc++.so.6(CXXABI_1.3.9)(64bit),它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 正在处理依赖关系 libstdc++.so.6(GLIBCXX_3.4.20)(64bit),它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 正在处理依赖关系 libstdc++.so.6(GLIBCXX_3.4.21)(64bit),它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 正在处理依赖关系 libc.so.6(GLIBC_2.28)(64bit),它被软件包 2:nodejs-22.14.0-1nodesource.x86_64 需要 --> 处理 nsolid-20.18.2-ns5.7.0.x86_64nodejs 的冲突 --> 解决依赖关系完成 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:libstdc++.so.6(GLIBCXX_3.4.21)(64bit) 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:glibc >= 2.28 已安装: glibc-2.17-326.el7_9.3.x86_64 (@updates) glibc = 2.17-326.el7_9.3 可用: glibc-2.17-317.el7.i686 (base) glibc = 2.17-317.el7 可用: glibc-2.17-322.el7_9.i686 (updates) glibc = 2.17-322.el7_9 可用: glibc-2.17-323.el7_9.i686 (updates) glibc = 2.17-323.el7_9 可用: glibc-2.17-324.el7_9.i686 (updates) glibc = 2.17-324.el7_9 可用: glibc-2.17-325.el7_9.i686 (updates) glibc = 2.17-325.el7_9 可用: glibc-2.17-326.el7_9.i686 (updates) glibc = 2.17-326.el7_9 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:libstdc++.so.6(GLIBCXX_3.4.20)(64bit) 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:libc.so.6(GLIBC_2.28)(64bit) 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:libstdc++.so.6(CXXABI_1.3.9)(64bit) 错误:软件包:2:nodejs-22.14.0-1nodesource.x86_64 (nodesource-nodejs) 需要:libm.so.6(GLIBC_2.27)(64bit) 错误:nsolid conflicts with 2:nodejs-22.14.0-1nodesource.x86_64 您可以尝试添加 --skip-broken 选项来解决该问题 您可以尝试执行:rpm -Va --nofiles --nodigest 如何解决
03-08
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fun肆编程

欢迎投喂

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值