SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。
今回は UNIX 環境(Linux)で Python から libnmz の nmz_get_version を呼び出すことを考えます。
モジュール名は前回と同じ Sample とします。 SWIG 用インターフェイスファイルを Sample.i という名前で作成します。 中身は前回と全く同じです。
%module Sample %{ #include "namazu/libnamazu.h" %} char *nmz_get_version();
Sample モジュールを作成するために次の内容の setup.py ファイルを作成します。
#!/usr/local/bin/python from distutils.core import setup, Extension Sample_module = Extension('_Sample', sources=['Sample.i', ], library_dirs = ['/usr/local/lib'], libraries = ['nmz'], ) setup (name = 'Sample', version = '0.1', author = "teranishi", description = """Simple swig example""", ext_modules = [Sample_module], py_modules = ["Sample"], )
python コマンドで実行し、Sample モジュールを作成します。
$ python setup.py build_ext --inplace
Python バインディングの Sample モジュールが作成されました。
インストールして使うこともできますが、ここではカレントディレクトリに生成 したライブラリをそのまま使ってみましょう。
Sample モジュールを呼び出す Python プログラム を run.py という名前で作成します。
#!/usr/local/bin/pyton import Sample print Sample.nmz_get_version()
このプログラムは nmz_get_version の値を表示するだけの単純なプログラムです。 実行すると、Namazu のバージョンが表示されます。
$ python run.py 2.0.18
非常に簡単な例ですが、SWIG を使って libnmz を Python から利用する方法をしめしました。 モジュールの生成方法は各言語ごとに異なりますが、 Perl や Java の時に使っ たものと同じインタフェースファイルから作成できることが分かったかと思います。 他の言語でも同じように利用することができますので、いろいろと工夫してみてください。
[お断り]
セコメントをする