如何从 node.js 使用C++库?

2022-08-30 04:24:08

如何从 node.js 使用C++库?


答案 1

这个问题现在有了一个新的答案。SWIG,从3.0版本开始,似乎为Node.js,Webkit和v8提供了javascript接口生成器

我已经在Java和Python中广泛使用SWIG一段时间了,一旦你了解了SWIG的工作原理,几乎不需要任何努力(与目标语言中的ffi或等效语言相比)将C++代码连接到SWIG支持的语言。

举个小例子,假设你有一个标题为myclass.h的库:

#include<iostream>

class MyClass {
        int myNumber;
public:
        MyClass(int number): myNumber(number){}
        void sayHello() {
                std::cout << "Hello, my number is:" 
                << myNumber <<std::endl;
        }
};

为了在 node 中使用这个类,你只需编写以下 SWIG 接口文件 (mylib.i):

%module "mylib"
%{
#include "myclass.h"
%}
%include "myclass.h"

创建绑定文件绑定。gyp:

{
  "targets": [
    {
      "target_name": "mylib",
      "sources": [ "mylib_wrap.cxx" ]
    }
  ]
}

运行以下命令:

swig -c++ -javascript -node mylib.i
node-gyp build

现在,从同一文件夹运行节点,您可以执行以下操作:

> var mylib = require("./build/Release/mylib")
> var c = new mylib.MyClass(5)
> c.sayHello()
Hello, my number is:5

尽管我们需要为这样一个小示例编写2个接口文件,但请注意,我们不必在任何地方提及构造函数或方法,SWIG会发现这些东西,并自动生成自然接口。MyClasssayHello


答案 2

看看node-ffi

node-ffi 是一个 Node.js插件,用于使用纯 JavaScript 加载和调用动态库。它可用于创建到本机库的绑定,而无需编写任何C++代码。