07/12/07 20:52:08
(追記) Windows における Ruby のバイナリ互換性について
ビルド環境として MinGW、 VC++6、VC++7、VC++8を考えます。
で、ちゃんと検証したわけではありませんが、おそらく以下が成立するはずです。
MinGWで作ったRubyとVC++6で作った拡張ライブラリは一緒に使える。逆も可。
MinGWで作ったRubyとVC++7で作った拡張ライブラリは一緒に使えない。逆も不可。
MinGWで作ったRubyとVC++8で作った拡張ライブラリは一緒に使えない。逆も不可。
VC++6で作ったRubyとVC++7で作った拡張ライブラリは一緒に使えない。逆も不可。
VC++6で作ったRubyとVC++8で作った拡張ライブラリは一緒に使えない。逆も不可。
これは利用されるC Runtime libraryの種類が問題になっています。
一応Windowsには異なるビルド環境で作ったオブジェクトファイルを混ぜても
「だいたい」問題なく動作させるための機構があるらしいのですが、
Rubyの場合問題が起こる部分を使っている、ということらしいです。
最近のRubyでは、ビルド時に異なるビルド環境を使おうとしてもできないような
対策が施されています。
そこで、バイナリ配布されているrubyの処理系は大半がVC++6かMinGW で
ビルドされているため、人に配布するためのバイナリを作るのであれば
このどちらかを使うべき、ということになります。
URLリンク(www.kmc.gr.jp)