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安装的,它这里直接提供了。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

node.js编写c/c++模块

gyp模块c++工程编写参照: http://deadhorse.me/nodejs/2012/10/08/c_addon_in_nodejs_node_gyp.html 工程可以参照这个处理,具...

Node.js 添加 C-C++ Addon

一直想要开一个博客,总结记录一下自己学到的东西,今天终于动笔写了第一篇,希望能够坚持下去。 我的博客主要会分享一些自己最近学习的东西,主要是给自己看的,如果能帮到别人的话当然最好了。 ------...

nodejs与C++交互(二)

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

C++与Nodejs的交互

待续

详解Node.js API系列C/C++ Addons(3) 程序实例

再续前文,前文介绍了node.js 的addon用法和google v8 引擎,下面,我们进入真正的编码,下面将会通过六个例子,学习node addon 范例,了解addon编程的特性 创建一个空项...

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

这里要说明一下,如果你的项目需要32位的lib,那你Debug x64时候会出问题,所以一定要做到 node.exe,node.lib,以及项目目标类型和项目所需要的都一致,都是x86或者x64. 注...

nodejs添加C++模块

安装node-gyp 新建hello.cc: Node的JavaScript引擎用的是Google开源的V8 JavaScript引擎(Chrome浏览器所用的引擎),所以简单介绍下v8中的一些概...

node在windows下node-gyp编译可能会出现的问题

node在windows下nw-gyp编译可能会出现的问题 如果调用模块时出现 Error: %1 is not a valid Win32 application. 这说明生成的模块跟平台不一致...

用C++扩展node.js(node-ffi版)

用C++扩展node.js(node-ffi版)
  • absurd
  • absurd
  • 2016-12-24 07:28
  • 2355

开源的 OnlineJudge

作者 virusdefender 原文链接 https://virusdefender.net/index.php/archives/657/ 。qduoj 是 青岛大学开源的一个 OnlineJ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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