2011-06-24
extconf.rbを書いて、MacRuby用のObjective-Cライブラリを作る。
Objective-C ライブラリを作るのに、Xcode を使ったり gcc のコマンドを実行するのが面倒だなと思っていたのですが、ControlTower は extconf.rb を使ってライブラリを作っていることが分かりました。
GC が有効になるように $CFLAGS を追加するだけのようです。
extconf.rb を書いてObjective-Cライブラリを作る
Objective-Cでライブラリを書きます。
#import <Foundation/Foundation.h> static int fib(int n) { if(n == 0) return 0; if(n == 1) return 1; return fib(n-1) + fib(n-2); } @class Fib; @interface Fib : NSObject - (int)calc:(int)n; @end @implementation Fib - (int)calc:(int)n { return fib(n); } @end void Init_Fib(void) {}
extconf.rbを書きます。create_makefile でライブラリのファイル名を指定します。
require "mkmf" $CFLAGS << ' -fobjc-gc ' create_makefile("Fib") # Fib.bundle を作る
$ macruby extconf.rb creating Makefile $ make /usr/bin/gcc -fno-common -arch x86_64 -fexceptions -fno-common -pipe -O3 -g -Wall -fobjc-gc -arch x86_64 -c -o fib.o fib.m /usr/bin/gcc -dynamic -bundle -undefined suppress -flat_namespace -arch x86_64 -o Fib.bundle fib.o -L. -L/Library/Frameworks/MacRuby.framework/Versions/0.11/usr/lib -arch x86_64 -lmacruby
ライブラリを呼び出してみます。
require './Fib' Fib.new.calc(30)
extconf.rbを使ってライブラリが作れるので、Objective-Cで作ったライブラリをRubyGemsとかで配布できますね (^o^)
トラックバック - http://d.hatena.ne.jp/Watson/20110624/1308923211
