SWIG を使ってみよう! [第1回] Perl 編2008年09月04日 01時32分21秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

最初は UNIX 環境で libnmz の nmz_get_version を呼び出すことを考えます。

nmz_get_version は、namazu/libnamazu.h に定義されています。

extern char *nmz_get_version();

この関数は libnmz の Namazu のバージョンを文字列で返す関数です。 (Namazu 2.0.13 以降利用可能です。libnmz のバージョンを返すわけではありません。)

今回はこれを Perl から呼び出す Perl バインディングを作成してみましょう。 (libnmz の Perl バインディングとしては Search-Namazu がありますが、 現在の Search-Namazu は nmz_get_version に対応していません。)

モジュール名を決めます。ここでは Sample というモジュール名にします。 SWIG 用インターフェイスファイルを Sample.i という名前で作成します。

%module Sample
%{
#include "namazu/libnamazu.h"
%}
char *nmz_get_version();

swig コマンドを使ってラッパ用コードを生成します。

$ swig -perl5 Sample.i

実行すると Sample_wrap.c が生成されます。

次に Perl 用モジュールを作成するために Makefile.PL を用意します。

use ExtUtils::MakeMaker;
WriteMakefile(
    'NAME'   => 'Sample',
    'INC'    => '-I/usr/local/include',
    'LIBS'   => '-L/usr/local/lib -lnmz',
    'OBJECT' => 'Sample_wrap.o'
);

Makefile.PL から Makefile を作成します。 (Namazu を /usr/local にインストールした場合)

$ perl Makefile.PL

make を実行します。

$ make

Sample モジュール(Perl バインディング)が作成されました。

インストールして使うこともできますが、ここではカレントディレクトリにリンクして使ってみましょう。

$ ln -s blib/arch/auto/Sample/Sample.so .

Sample モジュールを呼び出す Perl プログラム main.pl を作成します。

#!/usr/bin/perl

use Sample;

print Sample::nmz_get_version() . "\n";

このプログラムは nmz_get_version の値を表示するだけの単純なプログラムです。 実行すると、Namazu のバージョンが表示されます。

$ perl main.pl
2.0.18

非常に簡単な例ですが、SWIG を使って libnmz を Perl から利用する方法をしめしました。 他の関数も同様に呼び出すことが可能です。いろいろと工夫してみてください。 ここでは Perl を使いましたが Java 等の SWIG がサポートしている他の言語から利用することもできます。

[お断り]

  • SWIG Version 1.3.36 を使用しました。
  • perl v5.8.0 を使用しました。
  • Namazu 2.0.18 を使用しました。
  • libnmz は GPL ライセンスです。libnmz を動的であれ、静的であれリンクして使用するプログラムは GPL ライセンスと 矛盾しないライセンスである必要があります。
  • SWIG を用いて作成した Sample モジュールは libnmz をリンクしますので、GPL ラインセンスとして公開します。
  • Sample モジュールは GPL ライセンスですので、Sample モジュールを利用するプログラムは GPL ライセンスと矛盾しないライセンスでなければなりません。ご注意ください。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://namazu.asablo.jp/blog/2008/09/04/3740863/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。

_ ナマズのブログ - 2008年09月08日 20時25分45秒

SWIG を使って libnmz の様々な言語用のバインディングを作成してみましょう。

今回は UNIX 環境(Linux)で Java から libnmz の nmz_get_version を呼び出すことを考えます。

モジュール名は前回