Ruby Programing for FORTRAN 〜SWIGを使う(2)〜

内容

SWIGの基本的な使い方を説明するためにCで書かれた以下の関数を拡張ライブラリ化する例を示します。

%cat test.c

int add(int a, int b)
{
  return(a + b);
}
   

.

今回、このaddという関数をTestというモジュールの関数にラップします。 次のようなファイルを用意します。名前はtest.iにしておきましょう。

%cat test.i
%module test

int add(int a, int b);
   

一行目で"Test"というモジュールを作るということを宣言します。 以下、追加する関数を列挙していきます。
編集が終わったらこのファイルを利用してモジュール用のソースを生成します。

%swig -ruby test.i
%ls -al
total 12
drwxr-xr-x  2 kozuka  staff   512 Jun 28 02:44 .
drwxr-xr-x  4 kozuka  staff   512 Jun 28 02:11 ..
-rw-r--r--  1 kozuka  staff    45 Jun 28 02:12 test.c
-rw-r--r--  1 kozuka  staff    39 Jun 28 02:36 test.i
-rw-r--r--  1 kozuka  staff  7746 Jun 28 02:43 test_wrap.c
   

test_wrap.c、これが拡張ライブラリのソースになります。
後はMakefileを用意してmakeするだけです。

%cat Makefile.rb

require 'mkmf'
create_makefile('test')
^C
%ruby Makefile.rb
%make
cc -fPIC -D_THREAD_SAFE -O -pipe  -fPIC -I/usr/local/lib/ruby/1.6/i386-freebsd4.3 
-I/usr/local/include -c -o test_wrap.o test_wrap.c
cc -shared -Wl,-soname,test.so -L/usr/local/lib -o test.so test.o test_wrap.o -L. 
-lruby -lc
   

ここではMakefile.rbのcreate_makefileで指定した名前の共有オブジェクトを作るMakefileを生成しています。mkmfの使い方の詳細はRuby付属のREADME.EXTをよんでください
最後にadd関数のラップができているかテストしてみます。

%ruby -e "require 'test.so'; p Test.add(1, 2)"
3
   

問題なく動いているようです。

.

前に戻る [目次] 先に進む