我如何使用node.js中的C ++库?

我如何使用node.js中的C ++库?

看看node-ffi 。

node-ffi是一个用于使用纯JavaScript加载和调用dynamic库的Node.js插件。 它可以用来在不编写任何C ++代码的情况下创build与本地库的绑定。

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

我一直在广泛地使用SWIG来处理Java和Python,并且一旦了解了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; } }; 

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

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

创build绑定文件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 

尽pipe我们需要为这样一个小例子编写2个接口文件,但请注意,我们不必在任何地方提及MyClass构造函数和sayHello方法,SWIG会发现这些事情,并自动生成自然接口。

您可以使用node.js扩展来为您的C ++代码提供绑定。 这里有一个教程涵盖了:

http://syskall.com/how-to-write-your-own-native-nodejs-extension

你可以使用emscripten将C ++代码编译成js。

有更新的方法来连接Node.js和C ++。 请lo在楠 。

编辑最快最简单的方法是nbind GitHub链接 。 如果你想编写asynchronous附加组件,你可以结合nan的Asyncworker类。

与swig和C ++一起使用: http : //www.swig.org/Doc1.3/SWIG.html#SWIG_nn8

Blockquote不推荐在C ++源文件上运行SWIG(将出现在.C或.cxx文件中)。 尽pipeSWIG可以parsingC ++类声明,但是它忽略了与原始类定义分离的声明(声​​明被parsing,但是可能会产生大量的警告消息)。 例如:

 /* Not supported by SWIG */ int foo::bar(int) { ... whatever ... } 

很less有一个C ++类仅限于一个.h文件。

另外,支持JavaScript的swig版本是swig-3.0.1或更高版本。