我如何使用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或更高版本。