nodejs编译C++插件

nodejs 专栏收录该内容
11 篇文章 0 订阅

一、编译环境

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'

 

  • 0
    点赞
  • 0
    评论
  • 4
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值