Node.js的編譯測試

之前編譯和簡單測試了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
#

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已經編譯成功,該錯誤可以忽略。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章