之前編譯和簡單測試了Google V8引擎,Node.js就是在V8引擎的基礎上進一步擴展打造的服務端的JavaScript解釋器,當然這個功勞自然離不開牛叉的V8了
V8的設計最初爲了瀏覽器使用,而Node.js讓它在服務端繼續發揚光大,熟悉MongoDB的一定會想在這個數據庫中的引擎是什麼了,那是將來的問題了
1:下載最新版本
http://nodejs.org/download/
下載node-v0.10.16.tar.gz
2:編譯
解壓縮
huareal@gpx /cygdrive/f/pbase
# cd node-v0.10.16
huareal@gpx /cygdrive/f/pbase/node-v0.10.16
# ls
AUTHORS CONTRIBUTING.md LICENSE README.md common.gypi deps lib src tools
BSDmakefile ChangeLog Makefile benchmark configure doc node.gyp test vcbuild.bat
huareal@gpx /cygdrive/f/pbase/node-v0.10.16
#
# ./configure
4 [main] python 5684 exception::handle: Exception: STATUS_ACCESS_VIOLATION
1218 [main] python 5684 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
4 [main] python 5684 exception::handle: Exception: STATUS_ACCESS_VIOLATION
1218 [main] python 5684 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
3 [main] python 3508 exception::handle: Exception: STATUS_ACCESS_VIOLATION
688 [main] python 3508 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
3 [main] python 3508 exception::handle: Exception: STATUS_ACCESS_VIOLATION
688 [main] python 3508 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
4 [main] python 3456 exception::handle: Exception: STATUS_ACCESS_VIOLATION
764 [main] python 3456 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
4 [main] python 3456 exception::handle: Exception: STATUS_ACCESS_VIOLATION
764 [main] python 3456 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
4 [main] python 4976 exception::handle: Exception: STATUS_ACCESS_VIOLATION
673 [main] python 4976 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
4 [main] python 4976 exception::handle: Exception: STATUS_ACCESS_VIOLATION
673 [main] python 4976 open_stackdumpfile: Dumping stack trace to python.exe.stackdump
Traceback (most recent call last):
File "./configure", line 641, in <module>
configure_node(output)
File "./configure", line 453, in configure_node
host_arch = host_arch_win() if os.name == 'nt' else host_arch_cc()
File "./configure", line 378, in host_arch_cc
k = cc_macros()
File "./configure", line 316, in cc_macros
p.stdin.write('\n')
IOError: [Errno 32] Broken pipe
有點出師不利
make直接編譯,也是失敗,從錯誤分析,類似屬於Cygwin下編譯的問題存在Window的標示,看了需要在Linux或者VS2010直接編譯
3:測試VS2010編譯
打開node.sln
包括多個子工程
從代碼量來看,該Node.js工程的源碼量有79的左右
所依賴的第三方包包括:
cares
http_parser
npm
openssl
uv
v8
zlib
這些依賴包可謂龐大,多大70多M
通過VS2010編譯輸出結果爲:
========== 全部重新生成: 成功 17 個,失敗 2 個,跳過 0 個 ==========
兩個錯誤:
錯誤 34 error MSB6006: “cmd.exe”已退出,代碼爲 1。 C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 151 6 node_js2c
錯誤 123 error C1083: 無法打開包括文件:“node_natives.h”: No such file or directory F:\pbase\node-v0.10.16\src\node_javascript.cc 24 1 node
兩個工程編程失敗
node_js2c
node
查看錯誤
貌似下載的代碼中確實沒有node_natives.h
分析原因
Node使用v8附帶的js2c.py將node的js代碼轉化爲c語言的數組,也就是node_natives.h,然後直接編譯進node的可執行文件中
應該是缺少了將node.js編譯爲node_natives.h的原因。
在tools下面複製node.js,然後運行js2c.py獲取到node-natives.h
huareal@gpx /cygdrive/f/pbase/node-v0.10.16/tools
# ./js2c.py node_natives.h ../src/node.js
重新編譯
19> 正在創建庫 F:\pbase\node-v0.10.16\Debug\node.lib 和對象 F:\pbase\node-v0.10.16\Debug\node.exp
19> 正在創建庫 F:\pbase\node-v0.10.16\Debug\node.lib 和對象 F:\pbase\node-v0.10.16\Debug\node.exp
19> node.vcxproj -> F:\pbase\node-v0.10.16\Debug\\node.exe
========== 全部重新生成: 成功 18 個,失敗 1 個,跳過 0 個 ==========
還有一個失敗
錯誤 34 error MSB6006: “cmd.exe”已退出,代碼爲 1。 C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets 151 6 node_js2c
node_js2c工程存在問題
查看該工程的文件
沒有類似的東西,該工程的目的應該就是講node.js編譯爲node_natives.h
呵呵之前在cygwin下面通過js2c.py已經編譯成功,該錯誤可以忽略。