CentOS 6.5安装NodeJS

NodeJS 需要 gcc4.8+ 版本( gcc 4.8 开始全面支持 C 11C++ 11 的新特性)的支持。然而 CentOS6.5 系统默认版本是 4.4.7 ,需要升级 gcc 版本,否则在编译 NodeJS 时,会出现如下警告:

1
WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)

升级 gcc 版本

查看gcc版本:

1
2
3
4
5
6
# gcc -v
使用内建 specs。
目标:x86_64-redhat-linux
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-1.5.0.0/jre --enable-libgcj-multifile --enable-java-maintainer-mode --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --disable-libjava-multilib --with-ppl --with-cloog --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
线程模型:posix
gcc 版本 4.4.7 20120313 (Red Hat 4.4.7-17) (GCC)

CentOS6.5 的系统源提供的 gcc 最新版本是 4.4.7,不能通过 yum 来更新 gcc,这里用编译安装。
gcc下载点 有所有的 gcc 版本下载,最新版本是 7.2.0

安装依赖

1
2
3
4
5
6
7
安装C和C++的静态库
# yum install libgcc.i686 glibc-devel.i686
安装旧版本的gcc、c++编辑器
# yum install gcc gcc-c++
# yum install texinfo-tex flex zip

编译安装

下载解压安装包

1
2
3
# cd /usr/local/src
# wget https://ftp.gnu.org/gnu/gcc/gcc-4.8.2/gcc-4.8.2.tar.gz
# tar zxvf gcc-4.8.2.tar.gz

官方推荐,用 download_prerequisites 脚本下载编译必备的一些依赖包(如gmp、mpfr、mpc、cloog、isl等依赖库),自动解压当前目录

1
2
# cd gcc-4.8.2
# ./contrib/download_prerequisites

编译安装的路径是 /usr/src/gcc-4.8.2/,生成编译文件Makefile

1
2
3
# mkdir /usr/src/gcc-4.8.2
# cd /usr/src/gcc-4.8.2/
# /usr/local/src/gcc-4.8.2/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib

执行编译( ORZ,这过程会很久,大概两小时吧,基本把CPU和内存占光)

1
# make

安装

1
# make install

替换系统低版本gcc程序

系统自带低版本 gcc 4.4.7 的文件位置是 /usr/bin/gcc/usr/bin/lib ,这时需要将这些文件替换为最新安装的 gcc 文件,这里通过建立软链接替换。

1
2
3
4
5
6
# mv /usr/bin/c++ /usr/bin/c++.bak
# ln -s /usr/local/bin/c++ /usr/bin/c++
# mv /usr/bin/g++ /usr/bin/g++.bak
# ln -s /usr/local/bin/g++ /usr/bin/g++
# mv /usr/bin/gcc /usr/bin/gcc.bak
# ln -s /usr/local/bin/gcc /usr/bin/gcc

查看gcc版本:

1
2
3
4
5
6
7
8
# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.8.2/lto-wrapper
目标:x86_64-unknown-linux-gnu
配置为:/usr/local/src/gcc-4.8.2/configure --enable-checking=release --enable-languages=c,c++ --disable-multilib
线程模型:posix
gcc 版本 4.8.2 (GCC)

替换系统gcc动态链接库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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

可看出,gcc的动态链接库还是处于旧版本,说明生成的动态库没有替换旧版本 gcc 的动态库。

新版的gcc动态链接库位置是 /usr/local/lib64/libstdc++.so.6.0.18,替换gcc的动态链接库:

1
2
3
4
# 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动态链接库:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 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
GLIBC_2.3
GLIBC_2.2.5
GLIBC_2.14
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

结果表明,gcc动态链接库升级成功。

编译安装 NodeJS

下载并解压

NodeJS官网 下载想要的版本,这里安装的版本是 v7.10.0

1
2
3
# cd /usr/local/src/
# wget https://nodejs.org/dist/v7.10.0/node-v7.10.0.tar.gz
# tar zxvf node-v7.10.0.tar.gz

编译安装

安装路径 /usr/local/node

1
2
3
4
# cd node-v7.10.0
# mkdir /usr/local/node
# ./configure --prefix=/usr/local/node
# make && make install

配置环境变量

配置系统的环境变量,打开 /etc/profile ,加入:

1
2
3
NODE_HOME=/usr/local/node
PATH=$NODE_HOME/bin:$PATH
export NODE_HOME PATH

手动加载生效

1
# source /etc/profile

查看版本号

查看NodeJS的版本号,检查是否安装成功:

1
2
# node -v
v7.10.0

参考资料:
CentOS6.5升级gcc-4.8