如何使用 node.js 中的 C++ 库?
如何使用 node.js 中的 C++ 库?
IT技术
javascript
c++
node.js
binding
2021-02-09 17:17:12
6个回答
现在这个问题有了新的答案。SWIG,从 3.0 版开始,似乎为 Node.js、Webkit 和 v8提供了javascript 接口生成器。
我已经将 SWIG 广泛用于 Java 和 Python 一段时间了,一旦您了解 SWIG 的工作原理,就几乎不需要将 C++ 代码连接到 SWIG 的语言所需的工作(与 ffi 或目标语言中的等效语言相比)支持。
举一个小例子,假设你有一个带有头文件 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"
创建绑定文件 binding.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 个接口文件,请注意我们如何MyClass
不必在sayHello
任何地方提及构造函数和方法,SWIG 发现这些东西,并自动生成自然的接口。
看看node-ffi。
node-ffi 是一个 Node.js 插件,用于使用纯 JavaScript 加载和调用动态库。它可用于创建与本机库的绑定,而无需编写任何 C++ 代码。
您可以使用 node.js 扩展为 C++ 代码提供绑定。这是一个涵盖该内容的教程:
http://syskall.com/how-to-write-your-own-native-nodejs-extension
您可以使用emscripten将 C++ 代码编译成 js。
其它你可能感兴趣的问题