【CentOS7.6】 安装nodejs18.x.x,npm -v 报错:/lib64/libm.so.6: version `GLIBC_2.27‘ not found 解决办法

特别感谢,本篇是 博主 断剑zou天涯 的内容的 添加了 “很多坑的解决办法” 的版本。
站在巨人肩膀上。
参考原文:
node: /lib64/libm.so.6: version `GLIBC_2.27‘ not found问题解决方案

一、报错

1.报错内容
node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.25' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.28' not found (required by node)
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)

在这里插入图片描述

2.原因

从 nodejs 18.x.x 开始,都需要 GLIBC_2.27 的支持,然而我们没有这个版本

二、解决

1.在 /usr/local 目录下载 GLIBC_2.28(高版本)
cd /usr/local
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz

如果执行下载命令,发现无法下载,那么就需要手动下载,此处需要使用魔法!

2.解压,并且创建 build 目录
tar xf glibc-2.28.tar.gz 
cd glibc-2.28/ && mkdir build  && cd build
3.更新 glibc
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

注意,此处可能会发生报错:

configure: error: 
*** These critical programs are missing or too old: make bison compiler
*** Check the INSTALL file for required versions.
4.更新 gcc
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*

注意,执行 yum install -y devtoolset-8-gcc*,可能会发生报错,报错和解决办法参阅:
请下面两篇一起看,否则你改完步骤1的 .repo 文件,步骤2里还要改。

步骤1(配置 .repo 镜像源):https://blog.csdn.net/qq_43768851/article/details/140112143?spm=1001.2014.3001.5501
步骤2(解决 GPGKEY 不匹配问题):https://blog.csdn.net/qq_43768851/article/details/140113001?spm=1001.2014.3001.5501

5.备份原有的 gcc 和 g++ 文件(给它们改个名字)
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
mv /usr/bin/g++ /usr/bin/g++-4.8.5
6.使用新的 gcc 和 g++ 文件(创建软连接)
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
7.下载 make
cd /usr/local
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz
7.解压并进入
tar -xzvf make-4.3.tar.gz && cd make-4.3/
8.配置一下

运行该目录下的 configure 配置文件,来配置 make 的编译和安装参数
指定安装目录为 /usr/local/make

./configure  --prefix=/usr/local/make
9.配置安装make
make && make install
10.备份make
cd /usr/bin/ && mv make make.bak
11.安装 bison 依赖
yum install -y bison
12.进入 glibc 创建 build 目录,并开始编译和安装
cd /usr/local/glibc-2.28/build

../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin

执行成功的 output 末尾是这样的,大家自己检查:

在这里插入图片描述

13.安装
make && make install
14.查看 动态链接库

输出如下就是没问题

strings /usr/lib64/libstdc++.so.6 | grep CXXABI

在这里插入图片描述

15.下载更新文件

更新libstdc++.so.6.0.26

cd usr/local/
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
16.copy一份到 /usr/lib64/,并创建软连接
cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64/
ln -snf ./libstdc++.so.6.0.26 libstdc++.so.6

三、解决

1.运行一下试试
npm -v
node -v
2.解决了

在这里插入图片描述

<think>好的,用户遇到了在运行`npm run dev`时出现GLIBC和GLIBCXX版本缺失的错误。我需要先分析这些错误信息。看起来用户是在Linux系统上,可能使用的是CentOS或RHEL之类的发行版,因为这些系统通常使用较旧的库版本。 首先,错误信息提到node需要GLIBC_2.272.25、2.28,而当前系统的libc和libm库版本不够。同时,libstdc++.so.6缺少CXXABI和GLIBCXX的某些版本。这说明用户可能安装了较新版本的Node.js,而系统自带的库太旧,无法支持。 接下来,我需要考虑解决方法。通常有几种方式:升级系统GLIBC、手动编译高版本GLIBC(但风险大,可能影响系统稳定性)、使用静态链接的Node.js二进制,或者使用容器技术如Docker。另外,用户可能使用的是通过包管理器安装Node.js,可能没有正确选择适合系统的版本。 用户之前的问题是关于升级Node.js到v18,所以可能他们按照之前的指南升级了,但系统库不兼容。需要建议用户检查Node.js版本是否符合系统要求,或者换用其他方式安装Node.js,比如使用nvm并指定兼容的版本,或者使用预编译的包含所需库的Node版本。 另外,用户可能需要更新libstdc++,可以通过安装devtoolset或者升级gcc版本来解决。对于CentOS/RHEL 7,可能需要使用Software Collections来获取较新的工具链。同时,提醒用户谨慎操作,因为升级系统库可能有风险,特别是在生产环境中。 最后,给出逐步的解决方案,比如安装静态Node版本,使用nvm安装兼容版本,升级系统库,或者使用Docker容器。需要分步骤说明,确保用户能够安全地操作。</think>以下是针对GLIBC版本缺失问题的分步解决方案: --- ### 一、问题分析(关键原因) 错误提示表明系统缺少Node.js运行所需的底层依赖库: 1. **GLIBC版本过低**(要求≥2.27,系统当前可能为2.172. **libstdc++版本过低**(需要CXXABI_1.3.9等新特性) 3. **常见于CentOS/RHEL 7等老旧系统** --- ### 二、推荐解决方案(按优先级排序) #### ▶ 方案1:使用静态编译版Node.js(推荐) ```bash # 卸载当前nodejs sudo yum remove nodejs -y # 下载静态编译版(包含所需库) wget https://nodejs.org/dist/v18.20.1/node-v18.20.1-linux-x64-musl.tar.xz # 解压并安装 tar -xvf node-v18.20.1-linux-x64-musl.tar.xz sudo mv node-v18.20.1-linux-x64-musl /opt/node sudo ln -s /opt/node/bin/node /usr/local/bin/node sudo ln -s /opt/node/bin/npm /usr/local/bin/npm ``` #### ▶ 方案2:使用nvm安装兼容版本 ```bash # 安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc # 测试可用的Node版本(部分旧系统兼容版本) nvm install 16.20.2 --shared-libstdcxx nvm use 16.20.2 ``` #### ▶ 方案3:升级系统库(高风险操作) ```bash # CentOS/RHEL 7专用 sudo yum install centos-release-scl sudo yum install devtoolset-9-gcc devtoolset-9-gcc-c++ # 启用新工具链 scl enable devtoolset-9 bash # 验证gcc版本 gcc --version # 应显示gcc 9.x ``` --- ### 三、验证修复结果 ```bash # 检查动态库链接 ldd $(which node) # 关键库版本验证 strings /lib64/libc.so.6 | grep GLIBC_ strings /lib64/libstdc++.so.6 | grep GLIBCXX ``` --- ### 四、替代方案:使用Docker容器 ```dockerfile # 创建Dockerfile FROM node:18.20.1-alpine WORKDIR /app COPY . . RUN npm install CMD ["npm", "run", "dev"] ``` ```bash # 构建并运行 docker build -t next-app . docker run -p 3000:3000 next-app ``` --- ### 五、版本兼容对照表 | 系统环境 | 最高支持Node版本 | 所需操作 | |---------|-----------------|---------| | CentOS 7 | 16.x | 需使用方案1或方案3 | | CentOS 8 | 18.x | 直接安装官方包 | | Ubuntu 20.04 | 20.x | 原生支持 | --- ### 六、注意事项 1. **不要手动升级GLIBC**:可能导致系统崩溃 2. 生产环境优先使用Docker方案 3. 若使用方案3升级工具链后,需通过`scl enable`启动新环境 --- 通过上述任一方案操作后,重新执行以下命令测试: ```bash npm run dev ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

MicroLindb

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值