Node.js的编译测试

来源:互联网 发布:淘宝发布品牌不能为空 编辑:程序博客网 时间:2024/06/05 05:34

之前编译和简单测试了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已经编译成功,该错误可以忽略。