こんにちは、なかむら(う)です。

In message "[ruby-list:35811] 祝 1.7.3 But  cast_256.so  Segmentaation fault"
    on Aug.29,2002 10:30:30, <rubyist / mh1.117.ne.jp> wrote:
| 1.7.2から1.7.3になりウキウキ気分で、Rubyの環境(拡張ライブラリ)を整えて
| 動かしてみたら、cast_256(暗号ライブラリのバイナリ cast_256.so)
| で致命的なエラーが発生しました。(純粋rubyスクリプトだと動作します。)
(中略)
| 何か拡張ライブラリ?の仕組みでも変わったのでしょうか?(想像)

1.7.3から(厳密には、1.7.3に変わる数日前から)、mswin32および
mingw32では、Ruby本体のDLLのファイル名が変更されました。
これに伴い、全ての拡張ライブラリの再コンパイルが必要になって
います。

大きな非互換性を伴う変更でしたが、Ruby 1.8へ向けての作業の一
環であるということで、ご了解をお願いします。
なお、この変更の目的は、mswin32版とmingw32版で、拡張ライブラ
リをバイナリ互換とするためのものです。

なお、それはそれとして、1.7系では、時としてRubyのAPIが変更さ
れたりして、拡張ライブラリのバイナリレベルでの互換性が損なわ
れることがあるかもしれません。
というわけで、慌てず騒がず自前でコンパイルしなおすのが筋かも
しれません。
# と言っても、環境やモノによっては難しいかも、ということは理
# 解してますが。


それはそれとして、件のcast_256(というかrcast_256かな?)ですが、
以下のパッチを適応して、
  ruby extconf.rb
  nmake
でrcast_256.soを生成できると思います。
単にコンパイルを通すだけのパッチで、ソースの中身はぜんぜん見
てないんですが、いちおう動く模様。

diff -u2prN cast_256/vc++/extconf.rb cast_256_patch/vc++/extconf.rb --- cast_256/vc++/extconf.rb Thu Jan 1 09:00:00 1970 +++ cast_256_patch/vc++/extconf.rb Thu Aug 29 13:11:27 2002 @@ -0,0 +1,3 @@ +require 'mkmf' + +create_makefile('rcast_256') diff -u2prN cast_256/vc++/rcast_256.cpp cast_256_patch/vc++/rcast_256.cpp --- cast_256/vc++/rcast_256.cpp Sun May 23 23:13:08 1999 +++ cast_256_patch/vc++/rcast_256.cpp Thu Aug 29 13:11:03 2002 @@ -111,5 +111,5 @@ extern "C" __declspec(dllexport) void In rb_define_const(mCAST_256, "DECRYPT", INT2FIX(DECRYPT) ); - rb_define_module_function(mCAST_256, "set_key",(unsigned long (__cdecl *)(void)) set_key ,1); - rb_define_module_function(mCAST_256, "crypt_block",(unsigned long (__cdecl *)(void)) crypt_block ,3); + rb_define_module_function(mCAST_256, "set_key",(unsigned long (__cdecl *)(...)) set_key ,1); + rb_define_module_function(mCAST_256, "crypt_block",(unsigned long (__cdecl *)(...)) crypt_block ,3); }
それでは。 -- U.Nakamura <usa / osb.att.ne.jp>