node.js 的 GitHub 地址是:https://github.com/nodejs/node
官網源碼包下載地址時:https://nodejs.org/en/download/
① 獲取並編譯源碼(已經安裝了 git)
git clone https://github.com/nodejs/node.git cd node git checkout
編譯:
./configure
在編譯的時候出錯了:
提示:WARNING: C++ compiler too old, need g++ 4.8 or clang++ 3.4 (CXX=g++)
提示 C++ 編譯器 g++ 版本太老。
解決方案(參考:linux下升級gcc的方法 – 親測可用,編譯安裝 gcc 4.9並驗證使用):
1.下載gcc最新的源碼包 wget http://gcc.skazkaforyou.com/releases/gcc-4.9.1/gcc-4.9.1.tar.gz 2.解壓縮 tar -xf gcc-4.9.1.tar.gz 3. cd gcc-4.9.1 4.運行download_prerequisites腳本, ./contrib/download_prerequisites ,這個腳本會自動幫你下載所需要的依賴文件和庫
如果運行腳本失敗,提示:PASV 無法連接到 209.132.180.131 端口號 10003
那么就打開該腳本:
vim ./contrib/download_prerequisites
把里面幾個下載的命令注釋掉(5 個 wget 命令),然后單獨下載這 5 個源碼包,拷貝到 gcc-4.9.0 目錄下。
繼續:
5.建立輸出目錄,將所有的中間文件都放到該目錄, mkdir gcc_temp cd gcc_temp 6. 運行 ../configure --enable-checking=release --enable-languages=c,c++ --disable-multilib 7. make & make install
編譯安裝的時間比較長。
編譯安裝完成之后,再回到 node 目錄,編譯安裝:
./configure make && make install
出錯,使用 make test,提示:
[root@localhost node]# make test make -C out BUILDTYPE=Release V=1 make[1]: Entering directory `/usr/local/src/node/out' LD_LIBRARY_PATH=/usr/local/src/node/out/Release/lib.host:/usr/local/src/node/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../deps/v8/tools/gyp; mkdir -p /usr/local/src/node/out/Release/obj.target/v8_snapshot/geni; "/usr/local/src/node/out/Release/mksnapshot" --log-snapshot-positions --logfile "/usr/local/src/node/out/Release/obj.target/v8_snapshot/geni/snapshot.log" --startup_src "/usr/local/src/node/out/Release/obj.target/v8_snapshot/geni/snapshot.cc" "" /usr/local/src/node/out/Release/mksnapshot: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /usr/local/src/node/out/Release/mksnapshot) /usr/local/src/node/out/Release/mksnapshot: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/local/src/node/out/Release/mksnapshot) make[1]: *** [/usr/local/src/node/out/Release/obj.target/v8_snapshot/geni/snapshot.cc] 錯誤 1 make[1]: Leaving directory `/usr/local/src/node/out' make: *** [node] 錯誤 2
解決方案:
查看 GLIBCXX 版本:
[root@localhost node]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 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_FORCE_NEW GLIBCXX_DEBUG_MESSAGE_LENGTH
並沒有 GLIBCXX_3.4.20 和 GLIBCXX_3.4.15
參考: Linux升級安裝GCC: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.15 not found
執行以下命令,查找編譯 gcc 時生成的最新動態庫:
find / -name "libstdc++.so.6"
查詢結果:
[root@localhost gcc_temp]# find / -name libstdc++.so.6 /usr/local/src/usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/src/gcc-4.9.1/gcc_temp/prev-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/local/src/gcc-4.9.1/gcc_temp/i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/local/src/gcc-4.9.1/gcc_temp/stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/local/lib/libstdc++.so.6 /usr/lib/libstdc++.so.6
將上面的最新動態庫 libstdc++.so.6 復制到 /usr/lib 目錄下:
[root@localhost gcc_temp]# cp /usr/local/src/gcc-4.9.1/gcc_temp/stage1-i686-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6 /usr/lib
此時重新查詢:
[root@localhost lib]# strings /usr/lib/libstdc++.so.6 | grep GLIBCXX 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_DEBUG_MESSAGE_LENGTH
此時回到 node 目錄下嘗試重新編譯。
完成。
查看 node 版本:
[root@localhost node]# node --version
輸出:
[root@localhost node]# node --version v6.0.0-pre