nodejs編譯C++插件

一、編譯環境

1.安裝python2.7,建議安裝python2.7.15

2.Windows上編譯需要vs2015以及window SDK 8.1

3.Windows需要安裝如下工具(比較慢,大概需要30分鐘左右):npm install --global --production windows-build-tools

4.如果在CMD窗口編譯失敗,可打開VS開發人員命令提示符窗口進行編譯(與CMD窗口的環境變量有區別)

二、代碼結構以及Demo

// hello.cc
#include <node.h>

namespace demo {

using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;

void Method(const FunctionCallbackInfo<Value>& args) {
  Isolate* isolate = args.GetIsolate();
  args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}

void init(Local<Object> exports) {
  NODE_SET_METHOD(exports, "hello", Method);
}

NODE_MODULE(NODE_GYP_MODULE_NAME, init)

}  // namespace demo

注意,所有的 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

三、構建

編譯C++插件需要依賴node-gyp,使用npm install -g node-gyp安裝即可。然後創建編譯入口文件binding.gyp,內容如下:

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

然後執行以下兩條命令完成編譯:

//爲當前平臺生成相應的項目構建文件
node-gyp configure

//編譯最終的二進制可執行文件
node-gyp build

四、測試

// hello.js
const addon = require('./build/Release/addon');

console.log(addon.hello());
// 打印: 'world'

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章