Hatena::ブログ(Diary)

Watsonのメモ RSSフィード

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^)

champs20champs20 2011/06/29 23:32 実際に試してみました。extconf.rbすごい。何が起きているのやらさっぱりですが興味津々です。main.rbの最後の行はputsかなにか必要じゃないですか?

WatsonWatson 2011/06/29 23:50 色々遊んでみてください(^_^)
Fib.new.calc(30) は実行してみただけなので、puts などの処理と組み合わせてご利用ください。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/Watson/20110624/1308923211