当前位置: 首页 > news >正文

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

相关文章:

  • 展锐平台的手机camera 系统isptool 架构
  • 外贸电商系统卷轴模式开发:技术深度解析与实践
  • QEMU使用Qemu-Guest-Agent传输文件、执行指令等
  • 企业安全策略制定
  • 零知识证明当中Witness、Commitment 和 Proof 之间的关系
  • 可商业化的数字孪生系统
  • LeetCode 2266. 统计打字方案数
  • Apache Iceberg 数据类型参考表
  • 拉格朗日插值讲解与MATLAB例程
  • STM32——串口通信(发送/接收数据与中断函数应用)
  • 优化Mysql
  • JMX 框架
  • Python获取百度翻译的两种方法
  • C语言 | Leetcode C语言题解之第438题找到字符串中所有字母异位词
  • 【小程序】微信小程序课程 -2 快速上手
  • JS中 map, filter, some, every, forEach, for in, for of 用法总结
  • 「面试题」如何实现一个圣杯布局?
  • 【翻译】babel对TC39装饰器草案的实现
  • 0基础学习移动端适配
  • Apache Pulsar 2.1 重磅发布
  • js
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Markdown 语法简单说明
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • NSTimer学习笔记
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 分布式熔断降级平台aegis
  • 工作手记之html2canvas使用概述
  • 基于HAProxy的高性能缓存服务器nuster
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 聊聊directory traversal attack
  • 手写一个CommonJS打包工具(一)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 一起参Ember.js讨论、问答社区。
  • 在Mac OS X上安装 Ruby运行环境
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #NOIP 2014#Day.2 T3 解方程
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (二)Linux——Linux常用指令
  • (二十四)Flask之flask-session组件
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (简单) HDU 2612 Find a way,BFS。
  • (四)进入MySQL 【事务】
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (一)u-boot-nand.bin的下载
  • . NET自动找可写目录
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .net core 连接数据库,通过数据库生成Modell
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET NPOI导出Excel详解