避免glibc版本而报错,CentOS等Linux安装node.js完美方法

概述

        对于Node.js v18.x或更高,Node.js官方默认是在Ubuntu 20.04, Debian 10, RHEL 8,CentOS 8等高版操作系统上编译得到的,高版本操作系统的glibc版本≥2.28。所以,下载Node.js后,也需要glibc版本≥2.28才能使用。

       

     而CentOS 7.x等操作系统自带的glibc版本为2.17,使用Node.js官网下载的版本运行会报错:

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

        linux-vdso.so.1 =>  (0x00007ffca6bd4000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00002b574ed87000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00002b574ef8b000)
        libm.so.6 => /lib64/libm.so.6 (0x00002b574f293000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00002b574f595000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00002b574f7ab000)
        libc.so.6 => /lib64/libc.so.6 (0x00002b574f9c7000)
        /lib64/ld-linux-x86-64.so.2 (0x00002b574eb63000)

报错的原因操作系统的glibc版本低,但Node.js所需的版本高。

因glibc是操作系统的重要依赖库,许多软件都需要使用和依赖glibc。一旦贸然升级glibc为高版本,很可能导致操作系统及相关软件不稳定。所以不能轻易为了安装Node.js而随意升级glibc,尤其是在生产环境中。

常见的尝试办法

        对于以上问题,常见的解决办法都不完美。总结如下:

1、在CentOS 7.x等操作系统中,将默认的glibc版本强制升级为≥2.28。但此方法面临两个问题:①过程繁琐,为了编译glibc高版本,还需要升级gcc、make等。②升级完成后,依赖于glibc低版本的其他软件可能运行不稳定,存在发生未知错误风险。此风险生产环境通常无法接受。

2、CentOS 7.x等操作系统中,不改变整个OS系统的glibc版本,而是仅改变node所依赖的lib。比如:①在某个操作系统用户中(不使用root是避免破坏整个操作系统),下载node所需的依赖;②从官方下载的node可执行文件,通过patchelf工具修改node可执行文件,将其所依赖指向的“ld-linux-x86-64.so.2”、“libm.so.6”、“libc.so.6”等等再启动,具体可搜索网上教程。 此方法过程繁琐,可能来回出错,且属于对可执行文件强行修改,存在风险。

3、CentOS 7.x等操作系统中,下载Node.js源代码并进行本地编译。源代码编译仍需要①升级gcc、make等为高版本,②编译过程中仍需要依赖glibc 2.28。

注:Node.js不仅需要依赖高版本glibc,还需要高版本的gcc、make及其他库等开发工具。对于这些开发工具既可以单个下载单个安装,也可以采用更快更方便的方式安装。既:

通过Linux的scl计划,三部安装各种开发工具集,具体见:https://www.softwarecollections.org/en/scls/rhscl/devtoolset-8/

该网站只介绍了devtoolset-8,实际上还有devtoolset-9、devtoolset-10、devtoolset-11

完美解决办法

   以上问题不仅我们遇到,全世界都涉及此问题,因此Node.js官方也有人意识到此问题,在其github中,nodejs下有一个“unofficial-builds”子计划。

   “unofficial-builds” 子计划是在官方标准发布的基础上,额外提供适应其他平台的编译发布版,此Node.js编译版虽然官方不承担保证责任,所以命名为:“unofficial-builds”。 但由于是Node.js的子项目,也是挂在nodejs.org网站下的,算是“不担责的官方编译版”。“unofficial-builds”下载网址:

https://unofficial-builds.nodejs.org/download/release/

   对于Linux,选择对应平台下载并解压即可直接使用。

   此“unofficial-builds” 编译版与官方的标准发布仅仅是编译平台不同,推荐大家下载使用,比较稳定,还避免自己来回折腾。目前用起来非常完美。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/436487.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《安富莱嵌入式周报》第343期:雷电USB4开源示波器正式发布,卓越的模拟前端低噪便携示波器,自带100W电源的便携智能烙铁,NASA航空航天锂电池设计

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程 【授人以渔】CMSIS-RTOS V2封装层专题视频,一期视频将常用配置和用法梳理清楚&#xff0…

JMeter对jdbc request以及foreach和loop controller的使用

Jmeter中jdbc request和foreach控制器 1. 使用variable name实现对数据库查询结果的遍历 在foreach controller中,注意要做variable name的关联(correlation), 否则没法取回这里的jdbc request返回的结果。这里的input variable prefix一定要和jdbc request中的var…

【React】react项目中的redux使用

1. store目录结构设计 2. react组件中使用store中的数据——useSelector 3. react组件中修改store中的数据——useDispatch 4. 示例 react-basic\src\store\moduels\counterStore.js import { createSlice } from reduxjs/toolkitconst counterStore createSlice({name: cou…

新书推荐——《深度学习精粹与PyTorch实践》

深度学习绝非不可窥探的黑箱!深入理解其模型和算法的实际运作机制,是驾驭并优化结果的关键。你无需成为数学专家或资深数据科学家,同样能够掌握深度学习系统内部的工作原理。 本书旨在通过深入浅出的方式,为你揭示这些原理,让你在理解和解释…

视频理解新篇章:Mamba模型的探索与应用

人工智能咨询培训老师叶梓 转载标明出处 在计算机视觉领域,视频理解一直是一个核心研究方向,它要求算法能够捕捉视频中的时空动态以定位活动或推断其演变。随着深度学习技术的发展,研究者们探索了多种架构,如递归神经网络(RNN)、…

2024新淘宝镜像地址下载【vue-cli】

需要先安装NodeJS,然后再安装Vue-cli NodeJS下载 nodejs下载,直接搜官网 网址:https://nodejs.org/zh-cn LTS为长期稳定版本: 安装过程 只需要配置一下安装目录,其他都点下一步next 注意安装目录无中文无空格 验证…

【吊打面试官系列-MySQL面试题】为表中得字段选择合适得数据类型

大家好,我是锋哥。今天分享关于【为表中得字段选择合适得数据类型】面试题,希望对大家有帮助; 为表中得字段选择合适得数据类型 字段类型优先级: 整形>date,time>enum,char>varchar>blob,text 优先考虑数字类型,其次是…

微服务sentinel解析部署使用全流程

sentinel源码地址: 介绍 alibaba/Sentinel Wiki GitHub sentinel官方文档: https://sentinelguard.io/zh-cn/docs/introduction.html Sprong Cloud alibaba Sentinel文档【小例子】 : Sentinel alibaba/spring-cloud-alibaba Wiki GitHub 目录 1、…

车辆重识别(改进的去噪扩散概率模型)论文阅读2024/9/29

所谓改进的去噪扩散概率模型主要改进在哪些方面: ①对数似然值的改进 通过对噪声的那个方差和T进行调参,来实现改进。 ②学习 这个参数也就是后验概率的方差。通过数据分析,发现在T非常大的情况下对样本质量几乎没有影响,也就是说…

markdown 中启用音频支持

markdown 中启用音频支持 markdown 默认不支持音频文件&#xff0c;我们通过 html 标签渲染 flask项目 其中音频文件放在 /static/audios/vad_example.wav markdown 内容如下&#xff1a; ## 音频播放器示例 <audio controls ><source src"vad_example.wav…

基于Node.js+Express+MySQL+VUE科研成果网站发布查看科研信息科研成果论文下载免费安装部署

目录 1.技术选型‌ ‌2.功能设计‌ ‌3.系统架构‌ ‌4.开发流程‌ 5.开发背景 6.开发目标 7.技术可行性 8.功能可行性 8.1功能图 8.2 界面设计 8.3 部分代码 构建一个基于Spring Boot、Java Web、J2EE、MySQL数据库以及Vue前后端分离的科研成果网站&#xff0c;可…

新版pycharm如何导入自定义环境

我们新的版本的pycharm的ui更改了&#xff0c;但是我不会导入新的环境了 我们先点击右上角的add interpreter 然后点击添加本地编译器 先导入这个bat文件 再点击load 我们就可以选择我们需要的环境了

调用智谱AI,面试小助手Flask简单示例

文章目录 1.接入AI获取API密钥Python代码 2.小助手的实现流程3.Flask应用示例Python文件.pyindex.html运行Flask应用地址栏输入 http://localhost:5000/ 1.接入AI 获取API密钥 在智谱AI的官方网站上注册&#xff0c;右上角点击API密钥&#xff0c;新建并复制一个 API Key&…

Qt多线程操作sqlite数据库

问题 就是为了多线程操作sqlite数据库,为什么,因为数据库是耗时的操作,一条数据的插入,差不多200ms,如果是数据插入多了,界面会有明显的卡顿,因此必须,多线程操作数据库。 问题是这样的: 插入数据之后,接着更新界面;然而,插入数据是比较耗时的操作,尤其插入数据…

在java后端发送HTTPClient请求

简介 HttpClient遵循http协议的客户端编程工具包支持最新的http协议 部分依赖自动传递依赖了HttpClient的jar包 明明项目中没有引入 HttpClient 的Maven坐标&#xff0c;但是却可以直接使用HttpClient原因是&#xff1a;阿里云的sdk依赖中传递依赖了HttpClient的jar包 发送get请…

了解华为计算产品线,昇腾的业务都有哪些?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 随着 ChatGPT 的现象级爆红&#xff0c;它引领了 AI 大模型时代的深刻变革&#xff0c;进而造成 AI 算力资源日益紧缺。与此同时&#xff0c;中美贸易战的持续也使得 AI 算力国产化适配成为必然趋势。 …

【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题

Vue Router mode&#xff0c;为 history 无效&#xff0c;建议使用默认值 hash&#xff1b;

如何实现Mybatis自定义插件

背景 MyBatis的插件机制&#xff0c;也可称为拦截器&#xff0c;是一种强大的扩展工具。它允许开发者在不修改MyBatis框架源代码的情况下&#xff0c;通过拦截和修改MyBatis执行过程中的行为来定制和增强功能。 MyBatis插件可以拦截四大核心组件的方法调用&#xff1a;Executor…

【Pyecharts】时间线柱状图x轴坐标重复出现并重叠

问题描述 如图右侧显示多的一列坐标 解决方案 降低pyecharts版本&#xff1a;pip install pyecharts2.0.5

RabbitMQ基本原理

一、基本结构 所有中间件技术都是基于 TCP/IP 协议基础之上进行构建新的协议规范&#xff0c;RabbitMQ遵循的是AMQP协议&#xff08;Advanced Message Queuing Protocol - 高级消息队列协议&#xff09;。 生产者发送消息流程&#xff1a; 1、生产者和Broker建立TCP连接&#…