node-webkit node.js c++扩展

借鉴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,文件内容如下:

@echo off

if "%1"=="" goto help

mkdir "%1"

mkdir "%1"\include

copy /y src\node."%1"\include

copy /y src\node_object_wrap."%1"\include

copy /y src\node_buffer."%1"\include

copy /y src\node_version."%1"\include

copy /y deps\v8\include\*."%1"\include\

copy /y deps\uv\include\*."%1"\include\

mkdir "%1"\include\uv-private

copy /y deps\uv\include\uv-private\*."%1"\include\uv-private

mkdir "%1"\include\ev

copy /y deps\uv\src\ev\*."%1"\include\ev

mkdir "%1"\include\c-ares

copy /y deps\uv\include\ares."%1"\include\c-ares

copy /y deps\uv\include\ares_version."%1"\include\c-ares

mkdir "%1"\lib

copy /Release\node.lib "%1"\lib

copy /Release\node.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

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)使用,内容如下:


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_0\include
8、在工程属性的配置属性-链接器-常规-附加库目录添加目录:D:\nodejs_0_10_0\lib
9、在工程属性的配置属性-链接器-输入-附加依赖项添加lib库:node.lib

10、编译生成后在release(release 版)目录中生成一个文件 hellonode .node(文件名必须和上面NODE_MODULE(hellonode, init)中的模块名相同,否则找不到);

11、在目录创建js测试代码test.js,代码如下

var addons = require('./hellonode');
console.log('C/C++ addons.hello() =', addons.hello());

方法二:

2,安装node-gyp, npm install -g node-gyp

3,构建 hellonode工程


4、dos下进入hellonode文件的目录下(cd  C:\Projects\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:\Projects\hellonode)
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的版本。

在整个探索中,我个人和同事反复摸索,碰到了以上的几个问题。希望对大家有帮助。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值