PerlXS:C編

C/C++ライブラリのperlラッパーの作り方をメモ。まずは単純なCラッパーを。


まずh2xsコマンドで雛形を作る。

$$ h2xs -A -n Test

するとTest.xsというファイルができる。このファイル内ではC/C++のコードを書くことができる。普通にPerlで書くよりも高速な動作が期待できる。例えば、以下のようにする。

$$ cat Test.xs
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "ppport.h"
#include <stdio.h>

MODULE = Test    PACKAGE = Test
int
myprint(str, n)
char *str
int  n
CODE:
  int i;
  for (i = 0; i < n; i++) {
    printf("%s ", str);
  }
  printf("\n");
  RETVAl = 0;
OUTPUT:
  RETVAL

できたらmakeしてPerlモジュールをつくる。

perl Makefile.PL
gmake

これによって

blib/lib/Test.pm
blib/arch/auto/Test/Test.bs
blib/arch/auto/Test/Test.so

というファイルができる。あとはモジュールを呼び出すPerlコードを書けばよい。

$$ do.pl
#!/usr/local/bin/perl -Iblib/lib -Iblib/arch
use strict;
use warnings;
use Test;


my $r = Test::myprint("hello", 5);
print "return $r\n";

$$ ./do.pl
hello hello hello hello hello 
return 0;

となる。

なおXSの詳細な仕様はperlgutsを読むと良い。
http://www.kt.rim.or.jp/~kbk/perl5.005/perlguts.html