借鉴http://blog.csdn.net/haifengzhilian/article/details/26482529和http://ybxu-123.blog.163.com/blog/static/59473770201311315416334/的博客,
分享几个网站:
https://github.com/rogerwang/node-webkit/ node-webkit下载
http://nodejs.org/dist/ node.js下载
前几天,公司要使用node-webkit node.js 搞桌面应用但是,有大量数据操作耗内存,故想开发c++扩展,因为是第一次搞,弄了好几天,才搞定。 其实主要是版本对应问题,搞得好蛋疼。遂记录下来。
一、准备工作
1、下载node-v0.10.0-x86.msi,并安装
2、下载node-v0.10.0.tar并解压(我解压到e盘了)
3、装Python27(安装完后,在dos 下输入python 看是否添加到path中,若无,则将python安装路径添加到环境变量path中,并重启电脑。重启后再dos下输入python看是否有此命令。有了就ok)
二、正式开始
构建node扩展的方法:
方法一:
1、打开Windows命令行cmd.exe,进入E:node-v0.10.0,执行vcbuild.bat release,会在当前目录下生产release目录中生成编译C/C++扩展的编译环境(包括头文件、库和可执行文件),其中知道到node.exe、node.lib等文件。如图:
2、制作编译安装批处理文件,此处命名为nodins.bat,文件内容如下:
3、打开Windows命令行cmd.exe,切换 进入e:node-v0.10.0目录。将文件nodins.bat拷贝到e:node-v0.10.0中,在命令行执行:nodins.bat D:nodejs_0_10_0,将需要的node.js的c++头文件和库 复制到e:node-v0.10.0目录,方便vs(我使用的是vs2012)使用,内容如下:@echo off
if "%1"=="" goto help
mkdir "%1"
mkdir "%1"include
copy /y srcnode.h "%1"include
copy /y srcnode_object_wrap.h "%1"include
copy /y srcnode_buffer.h "%1"include
copy /y srcnode_version.h "%1"include
copy /y depsv8include*.h "%1"include
copy /y depsuvinclude*.h "%1"include
mkdir "%1"includeuv-private
copy /y depsuvincludeuv-private*.h "%1"includeuv-private
mkdir "%1"includeev
copy /y depsuvsrcev*.h "%1"includeev
mkdir "%1"includec-ares
copy /y depsuvincludeares.h "%1"includec-ares
copy /y depsuvincludeares_version.h "%1"includec-ares
mkdir "%1"lib
copy /y Releasenode.lib "%1"lib
copy /y Releasenode.exe "%1"
echo =================================
echo Install succeefully!
goto exit
if not errorlevel 0 echo Error "install-path" & goto exit
:help
echo nodins.bat install-path
:exit
4、用Visual Studio 2010创建一个DLL工程空白工程hellonode放在D:目录下,新建项目—>win32控制台程序,创建lib空项目
5、在项目中创建 cpp 文件:
//kkk.cpp
#include <node.h>
#include <iostream>
void main(v8::Handle<v8::Object> exports){
std::cout<<"Hello World"<<std::endl;
}
NODE_MODULE(kkk,main)
或者(下面这个是 我有次用vs编译时,每次都提示有问题,后来发现是NODE_SET_METHOD有问题,少库,也没办法,后来在我笔记本重装环境,编译就可以了)
#define BUILDING_NODE_EXTENSION
#include <node.h>
using namespace v8;
Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));
}
void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(hellonode, init)
(下面是添加我们上面整体的头文件和lib库了)
6、在工程属性的配置属性-常规中将目标文件扩展名改为.node;
7、在工程属性的配置属性-C/C++-常规-附加包含目录添加头文件目录为:D:nodejs_0_10_0include
8、在工程属性的配置属性-链接器-常规-附加库目录添加目录:D:nodejs_0_10_0lib
9、在工程属性的配置属性-链接器-输入-附加依赖项添加lib库:node.lib
11、在目录创建js测试代码test.js,代码如下
var addons = require('./hellonode'); console.log('C/C++ addons.hello() =', addons.hello());
方法二:
2,安装node-gyp, npm install -g node-gyp3,构建 hellonode工程
5、在当前目录下编写binding.gyp文件
6、node-gyp configure
node-gyp build
构建node-webkit扩展的方法:
1,安装node.js 版本为node-v0.10.0-x86.msi
2,安装nw-gyp, npm install -g nw-gyp
3,构建 hellonode工程
(
就是一个hellonode的c++文件。代码为
#define BUILDING_NODE_EXTENSION
#include <node.h>
using namespace v8;
Handle<Value> Hello(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("Hello world!"));
}
void init(Handle<Object> target) {
NODE_SET_METHOD(target, "hello", Hello);
}
NODE_MODULE(hellonode, init)
)
4、 dos下进入 hellonode文件的目录下(cd C:Projectshellonode)5、{
'targets': [
{
'target_name': 'hellonode',
'sources': [ 'hellonode.cc' ]
}
]
}
6、nw-gyp configure --target=0.8.4
{
0.8.6为node-webkit的版本。。。
}
nw-gyp build
结果展示:
总结:因为第一次做,所以走了好多弯路,有这个几个问题:
1、老板说是node.js的c++扩展,所以我们用vs和node-gyp编译的话,用node.exe可以启动使用,但是在node-webkit中使用不了。而且不知道vs编译和node-gyp编译是否一样
2、网上说node.js和node-webkit版本要一致,故我们的node-webkit是0.8.6的版本,所以我下了0.8.6的node.js来匹配,提示Modular不一致,后来在https://github.com/rogerwang/node-webkit/中看了下,这个版本的node-webkit支持0.10.0的node.js,坑啊
3、用node.js的编译方法编译后的xx.node,在node-webkit中使用不了,会崩掉
4、上面node-webkit编译c++时,0.8.4会以为是node.js的版本,所以也是报错,后来看了下它的编译信息,发现是连接的node-webkit的地址,说以那个其实是0.8.6node-webkit的版本。
在整个探索中,我个人和同事反复摸索,碰到了以上的几个问题。希望对大家有帮助。
最后
以上就是娇气电话最近收集整理的关于node-webkit node.js c++扩展的全部内容,更多相关node-webkit内容请搜索靠谱客的其他文章。
发表评论 取消回复