今回は外部のCライブラリを呼び出してみたいと思います。
一番簡単そうな例として、libcのputs関数を呼び出してみます。
まずはXSライブラリのひな形を作成します。
$ h2xs -A -n libcXS
perl Makefile.PL
次にXSソース(libcXS.xs)を編集します。
- #include "EXTERN.h"
- #include "perl.h"
- #include "XSUB.h"
- #include "ppport.h"
- #include "stdlib.h"
- MODULE = libcXS PACKAGE = libcXS
- void
- puts(value)
- char * value
追記したのは、include部にstdlib.hを追加したのと前回も追加した関数の戻り値などの定義部分です。
前回のようCODEセクションを定義してコードを書かなくても、既存のライブラリ呼び出しの場合は定義だけでOKです。
最後にmakeして完了です。
実際にこのモジュールを使ったPerlコードを使った例が次のものです。
標準出力にhogehogeと表示されるはずです。
#!/usr/bin/perl
use strict;
use ExtUtils::testlib;
use libcXS;
libcXS::puts("hogehoge");
だんだんわかってきたような気がしてきていますが、きちんと理解するためにはもう少し時間がかかりそうです。
ひとまず、perldoc perlxsとモダンPerl入門を改めて読んでみます。
----
追記:
なぜか、#include "stdlib.h"を消しても動きます…
前段階でincludeされてるのかなぁ、それとも別の原因…?
今度は違うライブラリでやってみたいと思います。
0 件のコメント:
コメントを投稿