藤本です、こんにちは。

From: "MAEDA Shugo" <shugo / aianet.ne.jp>
Subject: [ruby-dev:2761] Re: experimental release 1.1b9_21
Date: Wed, 27 May 1998 01:30:51 +0900

> 前田です。
> 
> >> のようにkconvだとOKなのですが、socketだとNGです:-(
> >> # socketの場合libnetをリンクしてるせいなのかな...。
> >
> >  について原因追求はしてないのですが、現象としてはrb_define_class()を
> >呼ぶときにNGになるみたいです。単純に
...
> >だとNGになります。さらにこの問題が起きるのはなぜかIntel版だけみたいで、
> >PowerMac版はどちらもOKです。
> 
> cObjectはexportされてるんですよね。
> うーん、なぜだろう。

  libruby.so側とmodule側のcObjectが違うところを指してるんじゃないかと
思って、object.cのInit_object()の最後とテスト用モジュールの初期化関数
Init_testmodule()に

    printf("cObject = %0X\n", cObject);
    printf("rb_define_class = %0X\n", rb_define_class);
    printf("rb_define_module = %0X\n", rb_define_module);

を埋め込んでみました。結果は、PowerPC版では期待どおりまったく同じ値が
表示されるのですが、Intel版では下のように違う値が表示されました。

    $ ruby -r testmodule -e exit
    cObject = 8003DD18h
    rb_define_class = EC23F20Fh
    rb_define_module = EC23F2EAh
    cObject = 556425FFh
    rb_define_class = EA00154Eh
    rb_define_module = EA001554h

  というわけで、module側のcOjbectとlibruby.so側のcObjectがまるで別のと
ころを指してるみたいです。ただ、rb_define_moduleの値が違うのに動いてる
ので、この確認の仕方自体問題があるかもしれません。

  この話は、ここよりもBeTalk-J MLの方で解決できる可能性が高そうな内容
だと思うので、そちらにruby-1.1b9_23がBeOS R3に対応しましたよとアナウン
スして話題を振ってみます。

=============================================================
 藤本尚邦  FUJIMOTO Hisakuni                hisa / imasy.or.jp
=============================================================