C++で作られたライブラリを、Javaから使用するにあたって、JNIを調べていましたが、、
- ネット上に転がっているJNIのサンプルは、簡単なものが多く、実際参考にするには情報が足りない。
- SunのJNIのドキュメント(JNI - Java Native Interface)を読んだが、理解するにはちょっと時間が…
ということで、SWIGを使ってみることにしました。
SWIGとは、CやC++で書かれたライブラリを、他の言語(主にスクリプト系の言語)から利用するためのコードを自動作成するツールです。SWIG用のインタフェースファイルを作成するだけで、各言語用のラッパーを自動生成してくれるという優れものです。
- 公式サイト
http://www.swig.org/ - 日本語サイト
http://swig-jp.dyndns.org/ - マニュアルの日本語訳
http://swig.shibu.jp/doc1319/index.html
※日本語サイトは今は落ちているようです…
使ってみた感想ですが、こんな簡単に出来ていいのかってくらい簡単でした。
例外のハンドリングや、C++側のメモリ管理(Javaやってると、ついついdelete忘れがち…)もちゃんと考慮されたラッパーが出来上がります。
今まで、CやC++とJavaを組み合わせて使用しようなんてあまり思いませんでしたが、SWIGでバインディングが簡単に出来ることがわかったので、今後はパフォーマンスに困ったらCやC++に逃げてみようかと思います。
<参考サイト>