下载nodejs12二进制压缩包,解压后运行./node提示缺库文件。在网上面试并试了好多次后,记录一下。
缺失库文件的错误提示:
[root@localhost bin]# ./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)
./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)
一共缺两种:libstdc++.so.6,libc.so.6
去相应的路径看看了看,其实也不算是缺文件,应该说是版本过低,需要升级。
升级的时候需要注意两点:足够的内存大小和硬盘空间。
我是在虚拟机上安装的,一开始不知道,虚拟机只给了8G的硬盘的1G的内存,安装过程中各报了一次错。把内在调到4G,硬盘调到20G后,就正常了。空间要求不高,一般情况下也不会出现这个问题。
在make过程中,会报错缺少c和c++编译器。使用yum进行安装。
yum install gcc
yum install gcc-c++
1、先安装libc.so.6
这个是按照「黑色外套」的博客教程去装的。https://blog.csdn.net/qq708986022/article/details/77896791
1)下载glibc2.17:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz
2)解压:
tar -xzf glibc-2.17.tar.gz
3)创建build目录:
mkdir build
4)进入build目录编译glibc:
cd build
../glibc-2.17/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make -j4
make install
注:如果执行configure的时候报configure: error: support for --no-whole-archive is needed,则把configure命令改成
../glibc-2.17/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include (我用的这个命令)
5)查看GLIBC版本
执行 strings /lib64/libc.so.6|grep GLIBC 查看版本已经支持GLIBC_2.17
[root@zhx-tserver2 build-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
[root@localhost bin]# ./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)
libc.so.6的not found已经没有了。
注意:libc.so.6更新失败的时候,会导致ls、cd这种普通命令失效,救急的办法是在命令前先导入老版本:
$ LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6 // libc-2.12.so 此项是系统升级前的版本
2. 安装libstdc++so.6
这个是按照xiaojun11-的博客安装的。https://blog.csdn.net/xiaojun111111/article/details/86492556
1.获取gcc4.8.5的源码包(不同的版本,基本是只需要换掉后面的版本号即可更换下载地址)
wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.5/gcc-4.8.5.tar.bz2
2.解压压缩包
tar -jxvf gcc-4.8.5.tar.bz2
3.进入解压后的目录
cd gcc-4.8.5
4.下载、配置和安装需要的依赖库
./contrib/download_prerequisites
这个脚本文件会自动帮我们下载、配置、安装依赖库,可以节约我们大量的时间和精力。
安装gcc需要下载诸如gmp、mpfr、mpc等依赖文件,执行download_prerequisites将会自动下载这些软件并解压到当前目录(文件不大,总共只有几MB,请耐心等待下载)。
5.直接在当前目录下创建一个目录,存放编译后的文件。
mkdir gcc-build-4.8.5
6.进入这个目录来编译
cd gcc-build-4.8.5
7.生成Makefile文件,准备编译整个项目(gcc4.8.5)
../configure -enable-checking=release -enable-languages=c,c++ -disable-multilib
前面的..表示会进入到上一层目录执行configure。所以gcc-build-4.8.5目录必须在gcc-4.8.5里面创建,也就是我们这样创建的。如果你想自己定义gcc-build-4.8.5目录的位置,你要处理好这里的路径问题。不建议处理,一个安装过程而已,不必折腾,就按照上述方法弄就行了。
8.编译gcc4.8.5的源码,非常耗时,时间决定于你的机器的性能。
make
不建议使用make -j4 方式编译,很可能会失败。-j4选项是make对多核处理器的优化。虽然直接make速度慢点,只要不出错,总体上还是可以接受的。
9.安装gcc4.8.5(非root用户要在前面加sudo)
make install
10.重启系统,让gcc4.8.5生效
reboot
11.查看gcc和g++的版本
gcc --version
g++ --version
提示为:
gcc (GCC) 4.8.5
g++ (GCC) 4.8.5
就表示已经安装成功,并且生效了。
特别注意,第10步很容易被忽略。如果不重启系统,查看的版本还是之前的老版本,会让你误认为安装没有成功的
系统自带低版本gcc文件位置为/usr/bin/gcc
和/usr/bin/lib
,此时需要将这两个部分删掉,或者后缀加上.bak
,然后通过建立软连接的方式替换系统默认位置的gcc
、c++
、g++
文件。
mv /usr/bin/c++ /usr/bin/c++.bak
ln -s /usr/local/bin/c++ /usr/bin/c++
mv ./g++ ./g++.bak
ln -s /usr/local/bin/g++ /usr/bin/g++
mv ./gcc ./gcc.bak
ln -s /usr/local/bin/gcc /usr/bin/gcc
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
输出结果如下, 可以看出,gcc的动态库还是处于旧版本,说明生成的动态库没有替换旧版本gcc的动态库。
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
查找编译gcc时生成的最新动态库。
find / -name "libstdc++.so*"
列出了新版的gcc动态链接库位置。
/usr/local/lib64/libstdc++.so.6.0.18
将上面的最新动态库libstdc++.so.6.0.18
复制到/usr/lib64
目录下,并重新建立软连接。
cp /usr/local/lib64/libstdc++.so.6.0.18 /usr/lib64
cd /usr/lib64/
rm -f ./libstdc++.so.6
ln -s libstdc++.so.6.0.18 libstdc++.so.6
再次查看gcc版本,以下结果表示动态库升级完成。
...
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
还有一篇完全通过源码安装的博文大家可以参考一下https://blog.csdn.net/wangqing_12345/article/details/52484723