我是靠谱客的博主 娇气电话,这篇文章主要介绍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 srcnode."%1"include

copy /y srcnode_object_wrap."%1"include

copy /y srcnode_buffer."%1"include

copy /y srcnode_version."%1"include

copy /y depsv8include*."%1"include

copy /y depsuvinclude*."%1"include

mkdir "%1"includeuv-private

copy /y depsuvincludeuv-private*."%1"includeuv-private

mkdir "%1"includeev

copy /y depsuvsrcev*."%1"includeev

mkdir "%1"includec-ares

copy /y depsuvincludeares."%1"includec-ares

copy /y depsuvincludeares_version."%1"includec-ares

mkdir "%1"lib

copy /Releasenode.lib "%1"lib

copy /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

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_0include
8、在工程属性的配置属性-链接器-常规-附加库目录添加目录:D:nodejs_0_10_0lib
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:Projectshellonode

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内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(97)

评论列表共有 0 条评论

立即
投稿
返回
顶部