windows平台搭带c++扩展的nodejs环境

原创 2017年03月25日 23:47:40

公司产品需要使用nodejs作后台服务器,同时要用C++处理逻辑和数据库存储,所以需要nodejs及其node-gyp扩展包环境,这环境在linux上搭建比较方便,在安装gcc和python2.6或2.7的环境上直接configure、make install就行了。但是作为linux新手,感觉linux上编码简直是痛苦,没有智能提示,嗯,我是linux新手。于是想回到windows上开发。

        可是在windows上装环境就稍微麻烦一点,摸索了几天才装上了。目前nodejs官网最新版本是6.10.0,此版本貌似只能用VS2015编译+python2.6或2.7(用VS2010没编译成功,mingw我还在摸索中),官网给的nodejs6.10.0的msi安装包安装后只有node.exe程序和npm(js包)这样的运行环境,没有node c++扩展的开发环境,也就是没有node相关的头文件和静态库即node、v8、uv等等,所以得自己拿源码来编译。

        先简单说一下关系,node.exe是javascript的解释器,基于v8框架可以使用node-gyp(也是一个js包,由node.exe解释执行)包将同样基于v8框架的C++代码编译为nodejs插件包来调用。新版本的nodejs已经自带npm,npm也是一个js包,由node.exe解释执行,它是nodejs的工具包管理工具,使用“npm install XXX”和“npm uninstall XXX”来安装和卸载其它工具包,比如node-gyp就可用npm来安装。

        编译nodejs源码前,先要安装VS2015和python2.6或2.7的环境,然后启动cmd控制台,进入源码目录,deps是依赖包的目录,发现npm就在里面,这个是js包,不需要编译,而openssl、uv、v8就需要编译了:


回到外层目录,执行vcbuild.bat就可编译,可加help查看帮助,再详细点文本方式打开vcbuild.bat,还会发现更多细节,比如运行“vcbuild VC2015”也是一样的。



开始本想试试加个msi项编译后打个包,发现还需要装什么Wix,没功夫研究了,就直接编译Release版了。

编译完成后,结果在当前目录下的Release目录里:

        

现在要把可执行程序和lib库以及外面src目录和deps目录的头文件和npm包提取出来,高手可以自己写脚本提取这些东东尤其是头文件。但我查看vcbuild.bat脚本发现原来configure是用python写的,看来大多过程都是bat和python在工作了。大致是vcbuild.bat调用python configure生成node.sln工程文件,再调用VS的msbuild程序来编译node.sln。

然后查看目录下的供gcc用的makefile文件,原来是调用tools目录下的install脚本,这应该是linux上编译的步骤,windows平台本来是要用Wix打包成msi的,现在我去按linux上的步骤去做:

于是乎我只要在命令行中输入该语句,就可以提取出相关的东西,再看看install.py脚本,发现它会从out\Release\里去提取node.exe,这是gcc编译时的生成路径,而VS编译时只有Release,没有out目录,所以干脆新建一个out目录,将Release目录移进去,

脚本在提取npm和node-gyp时会建立软链接,这个在windows系统上会报错,所以在如图第36行前加#将它注释掉先。

然后在命令行里输入“python tools\install.py [install | uninstall] <路径前缀>  <目录名>”,即可将node.exe、头文件、npm包提取到“路径前缀+目录名”的路径里,如图,我是将之提取到上级目录下的nodejs6.10.0目录中,


最后还是有一点需要手动处理的工作,查看提取后的目录,发现bin里只有node.exe,lib里只有npm包,也就是说之前编译的Release目录下的lib静态库和其它可执行程序还没有提取出来,需要手动复制。还有需要把lib\node_modules\npm\bin\npm.cmd和lib\node_modules\npm\bin\node-gyp-bin\node-gyp.cmd复制到node.exe所在的bin目录里,最后将该bin目录添加到系统的PATH环境变量中,就可以在命令行里执行node、npm、node-gyp命令了。node-gyp本可以用npm安装的,它这里直接提供了。


nodejs与C++交互(二)

module.hpp #pragma once #include class MyObject : public node::ObjectWrap { public: static v8::P...

C++与Nodejs的交互

待续

Node.js C++扩展实现

因为有了Node.js,JavaScript可以被用于服务端编程。通过各种扩展,Node.js可以变得非常强大。今天分享下怎样用C++创建Node.js扩展。 参考原文:Making Dynam...
  • yushulx
  • yushulx
  • 2015年06月02日 09:41
  • 1652

node.js C++ 扩展

node C++扩展在百度也能找到一部分资料,可能资料太早过时的原因,总是出错误 多试了几次,终于通过,把过程记下一下吧,我用的操作系统是Windows7,linux没有过,估计又是另一种情况了吧 ...

开发Node.js的Windows版C/C++原生扩展(node_0.10和node_0.12)

Node.js[1]的C/C++原生扩展实质上就是动态连接库[2]。Node.js在Windows环境中默认的编译器是VC;在Linux系统中,Node.js默认的编译器是gcc。 Node.js官方...

nodejs c++使用v8

原文地址:http://www.codeproject.com/KB/library/Using_V8_Javascript_VM.aspx 介绍 谁不想知道虚拟机是怎样工作的?不过,比起自己...
  • zs10hz
  • zs10hz
  • 2014年10月24日 10:26
  • 863

如何在VS2015中搭建可以写node.js的C++ Addon的环境

这里要说明一下,如果你的项目需要32位的lib,那你Debug x64时候会出问题,所以一定要做到 node.exe,node.lib,以及项目目标类型和项目所需要的都一致,都是x86或者x64. 注...
  • zcyzsy
  • zcyzsy
  • 2017年05月31日 17:02
  • 1046

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

用C/C++来实现 Node.js 的模块(上)

N久之前的一个坑——用 Node.js 来重构 NBUT 的 Online Judge,包括评测端也得重构一遍。(至于什么时候完成大家就不要关心了,(/‵Д′)/~ ╧╧   总之我们现在要做的其实...

用C/C++来实现 Node.js 的模块(下)

温故而知新,可以为湿矣   首先请大家记住这个 V8 的在线手册——http://izs.me/v8-docs/main.html。   还记得上次的 building.gyp 文件吗?{ "...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows平台搭带c++扩展的nodejs环境
举报原因:
原因补充:

(最多只允许输入30个字)