Ruby/SDL on MacOSX
on MacOSX とか in MacOSX とか悩みますよね。私は気にしない境地に達しています。
初日は Ruby/SDL を見てた。色々考えたけど、やっぱ SDL がイカンだろうという感は強い。要は SDL はユーザーの main をマクロで SDL_main に書きかえていて、 libSDLmain.a に main を忍ばせて、そこで Cocoa の起動をしてから Cocoa のイベントループに入ったら SDL_main を呼ぶ、と。
これのうっとうしいところは、一旦 main が動いちゃうと Cocoa の初期化をしてまた戻ってくる…ってことが簡単にできないことです。でまぁこいう苦労の記録がある、と。
http://www2s.biglobe.ne.jp/~nunokawa/wiki.cgi?page=Ruby%2FSDL+on+Mac+OS+X
http://eto.com/d/RubySDLonMacOSX.html
今はずいぶん簡単になってるみたいで、動かしたいだけなら
#include <SDL.h> void ruby_init(); void ruby_options(int argc, char* argv[]); void ruby_run(); int main(int argc, char* argv[]) { ruby_init(); ruby_options(argc, argv); ruby_run(); return 0; }
こんな感じのファイルを `sdl-config --cflags --libs` -lruby つきでコンパイルしてやれば動きます。
んでまぁ根本的な対策としては、私が考えてたのは、 Cocoa の初期化は別スレッド、とか初期化前に継続作っておいて舞い戻ってくる、とかですが、前者はどうもうまくいかなくて(少なくともイベント取れないと思う)、後者はめんどくなってやめました。