node.js から C++ ライブラリを使用するにはどうすればよいですか?
ベストアンサー1
今、その質問に対する新たな答えがあります。スウィグバージョン3.0では、JavaScript インターフェース ジェネレーターNode.js、Webkit、v8 用。
私はしばらくの間、Java と Python で SWIG を広範囲に使用してきましたが、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;
}
};
このクラスをノードで使用するには、次の 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
MyClass
このような小さな例のために 2 つのインターフェース ファイルを作成する必要がありましたが、コンストラクターやメソッドをどこにも記述する必要がないことに注意してくださいsayHello
。SWIG はこれらを検出し、自然なインターフェースを自動的に生成します。