nodejs在Linux下c++插件運行
如需轉載請標明出處:http://blog.csdn.net/itas109
QQ技術交流羣:129518033
環境:
Linux : ubuntu 16.04
nodejs : 10.15.2
node-gyp : 5.0.3
GCC : 5.4.0
Python : 2.7
1. 安裝nodejs
略過
2.安裝node-gyp
參考https://www.npmjs.com/package/node-gyp
Linux下:
前提:
- python (推薦 v2.7, v3.x.x 暫未支持)
- make
- C/C++編譯工具,例如GCC
# 安裝
npm install -g node-gyp
建立軟連接(這裏假設nodejs安裝路徑爲/app/software/)
sudo ln -s /app/software/nodejs/bin/node-gyp /usr/local/bin/
查看node-gyp的版本
node-gyp -v
3.編寫測試代碼
3.1 編寫hello.cc
#include <node.h>
#include <v8.h>
using namespace v8;
void Method(const v8::FunctionCallbackInfo<Value>& args)
{
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
void Init(Handle<Object> exports)
{
Isolate* isolate = Isolate::GetCurrent();
exports->Set(String::NewFromUtf8(isolate, "hello"),
FunctionTemplate::New(isolate, Method)->GetFunction());
}
NODE_MODULE(hello, Init)
注意,所有的 Node.js 插件必須導出一個如下模式的初始化函數:
void Initialize(Local<Object> exports);
NODE_MODULE(NODE_GYP_MODULE_NAME, Initialize)
NODE_MODULE 後面沒有分號,因爲它不是一個函數(詳見 node.h)。
module_name 必須匹配最終的二進制文件名(不包括 .node 後綴)。
在 hello.cc 示例中,初始化函數是 Init,插件模塊名是 addon。
3.2 編寫構建文件binding.gyp
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ]
}
]
}
3.3 編譯.node模塊
node-gyp configure --debug build
–debug參數表示生成debug文件
3.4 編寫hello.js
//hello.js
var addon = require('./build/Debug/hello.node');
console.log(addon.hello()); // 'world'
require的路徑需要和3.3中編譯出來的路徑一致
3.5 運行
node hello.js
3.6 結果
$ node hello.js
world
覺得文章對你有幫助,可以掃描二維碼捐贈給博主,謝謝!
如需轉載請標明出處:http://blog.csdn.net/itas109
QQ技術交流羣:129518033
License
License under CC BY-NC-ND 4.0: 署名-非商業使用-禁止演繹
Reference:
1.http://nodejs.cn/api/addons.html
2.https://www.jianshu.com/p/8a9f4304557c
3.https://www.npmjs.com/package/node-gyp