kumaryu日記
2007-04-12 メモ
_ [Ruby] wxruby2
MinGWでビルドメモ。
まずwxWidgetsからビルド。
configureは
./configure --prefix=c:/usr/local --disable-shared \ --enable-unicode --enable-opengl --disable-threads \ --enable-libtiff=builtin --enable-libjpeg=builtin \ --enable-libpng=builtin --enable-zlib=builtin
とかこんな感じ。だいたい適当だけど、--disable-threadsはやっておいた方が良さげ。あとlibjpegとかbuiltinにしないとよくわからない物とリンクされることがあったり無かったり。
で、wxruby2。
rake/rakemingw.rbが全く使えない。
use_wx_config $extra_ldflags = '-shared -shared' if $unicode_build then $wx_cpp_flags += ' -D_UNICODE -DUNICODE' end
こんな感じにする。-DUNICODEとかはwxWidgetsをUnicodeでビルドしたからなんだけど、なんで自動で付かないんだろ?
あと-sharedを二つ付ける意味は全くの不明。なぜかこうしないと通らないんだからしょうがないじゃん!
あとrake/rakewxもいじっとく。wx_configのwx-config実行あたりを適当に。wx-configそのままだと実行できないからwx-config.batとかにしてwx-config.batを作ってパス通ったところに置いておいた。
rakefileもおかしい。$ruby_libsは
$ruby_libs = [Config::CONFIG["LIBRUBYARG"], Config::CONFIG["LIBS"]].join(" ")
こんなかんじ? Macならlibrubyリンクしなくても動くんだろうけどさ…。
rubyのlib/ruby/1.8/i386-mingw/win32/win32.hとかでreadとwriteがマクロにされてるためiostreamをincludeして困ったことになる。コメントアウトしちゃえ。
swigでC++のラッパ作ると常に問題になるんじゃないかなぁ? iostreamをincludeしなけりゃいいのかもしれんけど、これってswigでやってるような気も…。
swig/classes/include/wxBrush.hでGetColour()の戻り値がwxColour&。なぜか参照を返すよう書かれてるんだろ? wxColourにしておく。Macでは普通に通るのが謎すぎる。と思ったらwxMacのCarbon版では参照を返すらしい。そんなのベースにされても困るな。
…ふう、やっと通ったぜ。文章にすると短いが失敗した時に原因を探すのが結構大変なんだよな。
あとはrake installでもしとけば普通に使えます。0.0.39ではWindowsで終了時にSEGVるんだけど、trunkから入れたら終了時にSEGVることも無かったよ。
しかしここまで来てopengl関係のヘッダとか入れてないからwxWidgetsの--enable-openglが効いてなかったのに気付いたのはまた別のお話。
つかもう出勤時間。毎日wxRubyのビルドしかしてねーよ!