nodejs addon用c++

1, 安装nodejs

安装python。

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

3,写代码:

新建一个目录,创建hello.cc文件,然后创建binding.gyp文件:

  • hello.cc

?





1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

#include<node.h>

#include<v8.h>

usingnamespace v8;

Handle<Value>Method(constArguments& args){

HandleScope scope;

return
scope.Close(String::New("world"));

}

void
init(Handle<Object> target){

target->Set(String::NewSymbol("hello"),

FunctionTemplate::New(Method)->GetFunction());

}

NODE_MODULE(hello, init)

  

binding.gyp文件:

+ ?





1

2

3

4

5

6

7

8

{

"targets":[

{

"target_name":"hello",

"sources":["hello.cpp"]

}

]

}

 

test.js 调用二进制。

?





1

2

3

var
addon = require(‘./build/Release/hello‘);

console.log(addon.hello()); <span style="line-height: 1.5; font-family: verdana, Arial, Helvetica, sans-serif; font-size: 13px;"> </span>

 

4,运行node-gyp
configure,下载依赖头文件,库。

gyp info it worked if it ends with
ok

gyp info using [email protected]
gyp info using
[email protected] | linux | ia32

gyp http GET
http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz

gyp http 200
http://nodejs.org/dist/v0.10.28/node-v0.10.28.tar.gz  

5,node-gyp build

  如果报找不到binding.gyp的错误,只要把binding.gyp拷贝到build文件目录下即可。

最后生成了hello.node二进制文件。

6,运行 node test.js 会输出
world  


好了,就这么简单。node就可以直接调用C++编写的程序。

对上面程序的解释:在hello.cc 中,我们首先创建了一个函数Method,
此函数返回一个"hello,world"的字符串,后面我们又创建了一个init的函数,作为一个初始化函数,我们去调用了一个函数

最后面,我们将这个模块绑定为:NODE_MODULE(hello, init)

在官网中指出,所有的node的插件必须输出一个初始化的函数,也就是说如下代码是在每个模块都必须有的,固定格式。

void Initialize (Handle<Object> exports);
NODE_MODULE(module_name, Initialize)

其中 module_name
必须对应上binding.gyp中的 
target_name 就可以了。

经过了node-gyp configure build 编译以后会在当前文件下生成一个build
的新的文件夹。我们通过在test.js中去引用这个build的结果,就可以调用C++的写的程序了。

OK,一个简单的node与C++程序就写完了。

现在这样node就可以和C++写的程序交互了,直接去调用C++写的程序了。如果觉得node处理不过来,都可以通过C++来处理。

2.node 通过callback 回调的方式,调用C++处理后的结果返回给node

1)按照上面的方式,首先建立3个文件 callback.cc, binding.gyp,test.js

callback.cc:


#define BUILDING_NODE_EXTENSION
#include <node.h>

using namespace v8;

Handle<Value> RunCallback(const Arguments& args) {
HandleScope scope;

Local<Function> cb = Local<Function>::Cast(args[0]);
const unsigned argc = 1;
Local<Value> argv[argc] = { Local<Value>::New(String::New("hello world")) };
cb->Call(Context::GetCurrent()->Global(), argc, argv);

return scope.Close(Undefined());
}

void Init(Handle<Object> exports, Handle<Object> module) {
module->Set(String::NewSymbol("exports"),
FunctionTemplate::New(RunCallback)->GetFunction());
}

NODE_MODULE(callback, Init)

binding.gyp:


{
"targets": [
{
"target_name": "callback",
"sources": [ "callback.cc" ]
}
]
}

test.js:

var addon = require(‘./build/Release/callback‘);

addon(function(msg){
console.log(msg); // ‘hello world‘
});

2)编译,在终端输入:node-gyp configure build ,会在当前目录下生成一个build 的新文件下

3)测试,node test.js  输出 //hello world

注意:如果有多个.cc 的文件,一定要将他们都包含在binding.gyp中,不然编译是通过了,但是node调用会报错。

测试代码地址:https://github.com/yupeng528/node-addon-test

参考: http://blog.whattoc.com/2013/09/05/nodejs_api_addon_1/ 入门

http://deadhorse.me/nodejs/2012/10/09/c_addon_in_nodejs_object.html
js与c++对象转换等等。。

时间: 2024-11-05 16:03:56

nodejs addon用c++的相关文章

nodejs addon/module

http://skitr.com/2014/05/13/debugging-node-js-addons-on-linux-and-mac-osx/ http://adilapapaya.com/docs/node-gyp/#installation https://nodejs.org/docs/latest/api/addons.html http://modernweb.com/2015/03/19/develop-an-ios-application-with-node-js-and-c

nodejs c++ addon

编译器是C++的编译器(g++?).官方例子: http://nodejs.org/api/addons.html 民间例子: http://cnodejs.org/topic/4f3dc5e19605c56a4b05351f V8 API文档,写C/C++拓展必备 这个API的node版本较老, 是10.X的. http://izs.me/v8-docs/annotated.html node-webkit 0.10.2基于node 0.11.13 只有官方文档 http://nodejs.o

记录开发Nodejs c++ addon的一些经验(一、技术栈)

Nodejs c++ addon 是用c++去编写Nodejs的插件 技术栈: 1.node-gyp 一个用于把c++文件编译成node可执行文件的库 2.v8 google v8引擎 用于处理c++的数据类型和node的数据类型的转换 3.nan 相当于对v8做了一层封装,去处理v8不同版本兼容的问题 4.c++ 因为插件是用c++编写,所以掌握c++的知识

使用makefile编译nodejs模块

使用过node-gyp编译nodejs的addon插件的人,一定很好奇,node-gyp到底帮你做了什么事情,还有,如果我们自己做,难度到底如何.本文不作makefile文件语法的讲解,如果你不懂, 没关系,能看懂基本流程就好.抛开node-gyp,你会发现,有些复杂的东西其实是基于很简单的原理. 环境 操作系统为centos7,已经安装了nodejs,版本为0.10.36,其实差不多新的版本就行.编译链也已经准备好,g++命令啦. 编写代码 源文件hello.cc,很简单,基本和官网的hell

编译nodejs及其源码研究

本文将从 源码 研究nodejs 的原理.本质,探讨nodejs的应用场景,以及高性能开发实践指南. 目录: 第一节:编译node.js 第二节:源码分析 进入主题:以下是在win7 64 下进行,其他平台编译 ,请参见官网. 第一节:编译node.js,过程很简单 1.下载源码.  git clone https://github.com/joyent/node 如果没有安装git客户端,可以在打开https://github.com/joyent/node  点击 Download ZIP,

《Nodejs开发加密货币》之二十七:开发通用的HTML组件

人的懒惰常常是麻烦的开始.多数程序员都希望自己的工作一劳永逸,一次开发,到处使用,成了人人追逐的目标,我也不例外.最初写<Nodejs开发加密货币>系列文章,因为不喜欢设定好了去写,所以目录反复修改,索性弄了小工具gitbook-summary:在写入门文章的时候,反复搜索github,索性把检索与制图集成到一起,弄了个开发语言检索统计工具(见<Node.js让您的前端开发像子弹飞一样>文章实例):阅读源码的时候,手动整理Uml图很辛苦,干脆写成了js2uml工具(见<轻松从

nodejs api 中文文档

文档首页 英文版文档 本作品采用知识共享署名-非商业性使用 3.0 未本地化版本许可协议进行许可. Node.js v0.10.18 手册 & 文档 索引 | 在单一页面中浏览 | JSON格式 目录 关于本文档 稳定度 JSON 输出 概述 全局对象 global process console 类: Buffer require() require.resolve() require.cache require.extensions __filename __dirname module e

Node.js C++ addon编写实战(一)之node-gyp

http://deadhorse.me/nodejs/2012/10/08/c_addon_in_nodejs_node_gyp.html 这是一个三篇的系列文章,记录Node.js C++扩展开发中的一些经验与坑.Node.js C++ addon编写实战(一)之node-gypNode.js C++ addon编写实战(二)之对象转换Node.js C++ addon编写实战(三)之Buffer 补上第四篇:Node.js C++ addon编写实战(四)之兼容v0.11+与nan模块 从n

nodejs require执行流程

为什么要加这个必读!因为webpack本身是基于node环境的, 里面会涉及很多路径问题,我们可能对paths怎么写!webpack又是怎么找到这些paths的很迷惑. 本文是我已经写完正式学习React(五)后新加的!我觉得很有必要让大家知道! ------------------------------------------------------------------------------------------------------ nodejs require执行流程  ===