centos 使用 n 切换 node 版本

617 阅读2分钟
  1. 安装 n
npm install -g n
  1. 使用命令
// 切换版本
 n 10.16.3
// 获取最新版本
n latest
// 删除版本
n rm 10.16.3
// 查看已安装版本
n ls
  1. 在 centos 使用 n 安装 18.16.0,会报错,如下
n 18.16.0
node -v 
报以下错误:
错误一: node: /lib64/libm.so.6: version `GLIBC_2.27' not found (required by node) 
错误二:node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found

解决错误一: 上网查询资料所知,新版的 node v18 开始 都需要 GLIBC_2.27 支持,可是目前系统内却没有那么高的版本,所以更新 GLIBC 即可

wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz 
tar xf glibc-2.28.tar.gz
cd glibc-2.28/ && mkdir build && cd build 
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
报错:
 These critical programs are missing or too old: make bison compiler
 Check the INSTALL file for required versions.
 
解决:
# 升级GCC(默认为4 升级为8) 
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc* 
mv /usr/bin/gcc /usr/bin/gcc-4.8.5 
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc 
mv /usr/bin/g++ /usr/bin/g++-4.8.5 
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++

# 升级 make(默认为3 升级为4) 
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz 
tar -xzvf make-4.3.tar.gz && cd make-4.3/ 
./configure --prefix=/usr/local/make make && make install 
cd /usr/bin/ && mv make make.bak 
ln -sv /usr/local/make/bin/make /usr/bin/make

# 安装  bison
yum install -y bison

#重新编译
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install

解决错误二: 解决方法是升级libstdc++

1. 查看系统版本
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
2. 
sudo yum provides libstdc++.so.6
3.
cd /usr/local/lib64
# 下载最新版本的libstdc.so_.6.0.26
sudo wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
# 将下载的最新版本拷贝到 /usr/lib64
cp libstdc++.so.6.0.26 /usr/lib64
cd  /usr/lib64
# 查看 /usr/lib64下libstdc++.so.6链接的版本
ls -l | grep libstdc++
libstdc++.so.6 ->libstdc++.so.6.0.19
# 删除/usr/lib64原来的软连接libstdc++.so.6,删除之前先备份一份
sudo rm libstdc++.so.6
# 链接新的版本
sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6
# 查看新版本,成功
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX

最终就可以正常使用 n 切换 node 版本了。

参考网址: www.cnblogs.com/dingshaohua… www.jianshu.com/p/050b2b777…