Masahiro Kitajima
katon****@katon*****
2005年 1月 2日 (日) 22:21:59 JST
かとんぼです。 1.8.2 版の exerb コアのビルドを試みていて、テストしようとしてこの問題に 遭いました。^^; 変わったのはごく最近みたいですね。 C:\TMP>ruby -ve "p [nil].pack('S')" ruby 1.8.2 (2004-11-09) [i386-mswin32] "\000\000" pack.c 1.62.2.7 2004/11/10 16:17 matz * dir.c (rb_glob2): do not allocate buffer from heap to avoid memory leaks.use string object for buffering instead. [ruby-dev:24738] * dir.c (join_path): ditto. * io.c (io_read): external input buffer may be modified even after rb_str_locktmp().[ruby-dev:24735] * dir.c (fnmatch): p or s may be NULL.[ruby-dev:24749] pack.c をこの版に換えると現在と同じ結果になりました。 C:\TMP>ruby -ve "p [nil].pack('S')" ruby 1.8.2 (2004-11-09) [i386-mswin32] -e:1:in `pack': no implicit conversion from nil to integer (TypeError) from -e:1 それはともかくとして、VC++ 6.0 などがある事が前提ですが、mswin32版のコア とランタイムは次のような手順でビルド出来ているようです。 まだ手元では、上記の問題でこれを使った .EXE 生成に至ってないので、検証は できていないのですが。 (1) exerb-3.2.0.tar.gz を展開。 (2) exerb-3.2.0\src\ に ruby-1.8.2.tar.gz を展開。 (3) exerb-3.2.0\src\ruby-1.8.2\win32\ で、configure.bat 実行後、 nmake config して、config.h を作り、exerb-3.2.0\src\ruby-1.8.2\ にコピ ーする。 (4) exerb-3.2.0\project\ の ruby181* ディレクトリをコピーして ruby182* デ ィレクトリを作成。 (5) 各 ruby182* ディレクトリで、*.dsw ファイルを削除。ruby181*.dsp ファイ ルを ruby182*.dsp に rename。 (6) 各 *.dsp ファイル中の "ruby181" を "ruby182" に置換。"ruby-1.8.1" を "ruby-1.8.2" に置換。 (7) exerb-3.2.0\project\exerb\exerb.dsp ファイル中の "ruby-1.8.1" を "ruby-1.8.2" に置換。 (8) exerb-3.2.0\project\exerb\exerb.dsw でワークスペースを開き、Release ビ ルド。 (9) 各 ruby182*.dsp ファイルでワークスペースを開き、Release ビルド。 以上で、exerb-3.2.0\data\exerb\ 以下に exerb32.dll と ruby182*.exc ファ イルが得られます。 -- 北島雅博(かとんぼ)