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