欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 避免glibc版本而报错,CentOS等Linux安装node.js完美方法

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

2024/10/25 16:21:07 来源:https://blog.csdn.net/zyplanke/article/details/142591873  浏览:    关键词:避免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” 编译版与官方的标准发布仅仅是编译平台不同,推荐大家下载使用,比较稳定,还避免自己来回折腾。目前用起来非常完美。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com