c++写nodejs的扩展模块
by 伍雪颖
记住目录各文件的位置,主要是3个文件,hello.cc,binding.gyp,hello.js
hello.cc代码:
#include <node.h> #include <v8.h> using namespace v8; Handle<Value> SayHello(const Arguments& args) { HandleScope scope; return scope.Close(String::New("Hello world!")); } void Init_Hello(Handle<Object> target) { target->Set(String::NewSymbol("SayHello"),FunctionTemplate::New(SayHello)->GetFunction()); } NODE_MODULE(hello,Init_Hello)
binding.gyp代码:
{ 'targets':[ { 'target_name':'hello', 'sources':['src/hello.cc'], }] }
写好这两个文件后,编译生成模块文件:
1.要用到node-gyp工具
安装:npm install -g node-gyp
2.安装后编译:
node-gyp configure
node-gyp build
3.编译成功后,会在build/Release目录下出现一个hello.node文件
一般都会编译成功的,我原来binding.gyp文件内容是:
{
‘targets‘:[
{
‘target_name‘:‘hello‘,
‘sources‘:[‘src/hello.cc‘],
‘conditions‘:[[‘OS == "mac"‘,
{
‘libraries‘:[‘-lnode.lib‘]
}]]
}]
}
这样会报缺少-lnode.lib的错误,多此一举了,不要加就行!
接下来是调用它:
hello.js代码:
var hello = require('./build/Release/hello.node'); console.log(hello.SayHello());
执行:
node hello.js
成功输出hello world!
时间: 2024-10-22 06:14:28