swigを使ってCのライブラリをRubyから呼び出す

Raspberry pi (OS: Raspbian - wheezy) でSWIGのテスト。

こんなCファイルを作成。
hoge.c(名前は適当でいい)

void hoge(int num){
	printf("Hello, hoge!\n");
}

int main()
{
  hoge(0);
}

インターフェースファイル(っていうのかな?)を作る。
(初期化しないときはイニシャライザは要らない)
hoge.i

%module hoge
%{
  extern void setup_hoge(int num);
  extern void hoge(int num);
%}
%init
%{
  extern void setup_hoge(int num);
%}

extern void hoge(int num);

SWIGでラッパー関数を作成する。

$ swig -ruby hoge.i

extconf.rbファイルの作成
extconf.rb

require 'mkmf'
create_makefile('hoge')


Makefileの作成

$ ruby extconf.rb

soファイルの作成

$ make

出来上がったhoge.soファイルを
/home/pi/gpiotest/test# cp hoge.so /usr/lib/ruby/1.9.1/arm-linux-eabihf/
に移動しておく。

テスト。

# irb
irb(main):001:0> require 'hoge'
=> true
irb(main):002:0> ho = Hoge
=> Hoge
irb(main):003:0> ho.hoge(0)
Hello, hoge!
=> nil