最近为了升级了最新的Node.js,遇到一系列坑
首先去node官网下载node:https://nodejs.org/en/download/releases/
选择你所需要安装的版本点download ,选择 linux-x64.tar.xz 为结尾的点击即可
这里我以v16.15.0版本为例:
node-v16.15.0-linux-x64.tar.xz
//解压
# tar -xvf node-v12.5.0-linux-x64.tar.xz
//换包路径
# mv node-v12.5.0-linux-x64 /usr/local/node
对 Node.js 16.15.0 解压并配置环境后,运行node -v时发现以下各种依赖问题required by node:
# node -v
node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by node)
node: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.18' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by node)
node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by node)
网上找了一些解决办法,顺便记录下来:
一、先解决第一行node: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by node)的问题
首先,检查动态库:
# 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_PRIVATE
发现最高只有 GLIBC_2.12
,所以这里需要下载最新gcc
库:
为什么下2.17的版本, 你看我报错那边是 2.16、2.17 、2.14 实际你下2.17版本里面包含了2.14和2.16版本了。所以把这一步干完就能解决前三行前置依赖报错啦
# wget https://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
更多版本:https://ftp.gnu.org/gnu/glibc/
然后解压:
# tar -xvf glibc-2.17.tar.gz
然后编译安装 gcc
:
# cd glibc-2.17
# mkdir build
# cd build
# ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
这是一个漫长的过程:
# make && make install
完事后重新查看版本GLIBC版本,成功更新到2.17
# 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
二、咱们来解决node: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by node) 的问题
首先,还是检查动态库:
# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
发现最高只有 GLIBCXX_3.4.13
,所以这里需要下载最新gcc
库:
# wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-8.3.0/gcc-8.3.0.tar.gz
更多版本:Index of /software/gcc/releases/
然后解压:
# tar -zxvf gcc-8.3.0.tar.gz
然后编译安装 gcc
:
# cd gcc-8.3.0/
# ./contrib/download_prerequisites
# mkdir build
# cd build
# ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
这是一个漫长的过程:
# make && make install
此项结束后看到一堆报错。。。。但翻阅资料后暂不理
执行如下命令,查找编译gcc时生成的最新动态库:
# find / -name "libstdc++.so*"
输出以下:
/usr/lib64/libstdc++.so.6
/usr/lib64/libstdc++.so.6.0.13
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/libstdc++.so
/usr/lib/gcc/x86_64-redhat-linux/4.4.4/32/libstdc++.so
/usr/local/gcc-8.3.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
/usr/local/gcc-8.3.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
/usr/local/gcc-8.3.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25
注释:1、最后一行为最新动态库
2、/usr/local/gcc-8.3.0/是升级gcc时的输出目录。
将上面的最新动态库libstdc++.so.6.0.25地址全路径复制到/usr/lib64目录下:
# cp /usr/local/gcc-8.3.0/build/x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.25 /usr/lib64
1、切换目录至/usr/lib64;2、删除原来软链接;3、将默认库的软链接指向最新动态库
# cd /usr/lib64
# rm -rf libstdc++.so.6
# ln -s libstdc++.so.6.0.25 libstdc++.so.6
默认动态库升级完成。从新运行如下命令检查动态库:
# strings /usr/lib64/libstdc++.so.6 | grep GLIBC
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_3.4.20
GLIBCXX_3.4.21
GLIBCXX_3.4.22
GLIBCXX_3.4.23
GLIBCXX_3.4.24
GLIBCXX_3.4.25
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.14
GLIBC_2.18
GLIBC_2.16
GLIBC_2.17
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
现在,动态库的版本已经到了GLIBCXX_3.4.25
。
再次运行node -v,发现升级完成!大功告成泪目
# node -v
v16.15.0