From: nobuyoshi nakada Date: 2005-10-25T19:06:02+09:00 Subject: [ruby-dev:27521] Re: [ ruby-Bugs-2613 ] building ruby 1.8.3 on Solaris なかだです。 At Tue, 25 Oct 2005 18:00:27 +0900, Yukihiro Matsumoto wrote in [ruby-dev:27515]: > || 拡張がロードできるのに、ライブラリを「流用」できないという状 > || 況を説明できる自信がありません。 > | > |「拡張ライブラリ」はロードできるけど、「ヘッダやライブラリ」 > |は流用できないわけですが、後者の「ライブラリ」は「インポート > |ライブラリ」であって「拡張ライブラリ」ではありません。 > |言葉足らずですみませんです。 > |# やっぱ「拡張モジュール」と呼ぶべきか? > > それは分かってます。ただ、拡張ライブラリがロードできるのに、 > 拡張ライブラリを経由して「呼び出せる」はずのライブラリが「流 > 用」できないとはどういうことか疑問に思ったわけです。あるいは > 「流用」という単語が指示しているものが私のイメージと異なるの > かもしれないと思って、括弧で括ってみたのですが。 「拡張ライブラリを経由」しているわけではなくて、中間形式である インポートライブラリが異なるということです。 というか、実際に試してみようとしたら、 $ gcc -mno-cygwin -shared -I /mnt/c/ruby/lib/ruby/1.8/i386-mswin32 -o my_test.so my_test.c -L /mnt/c/ruby/lib -lmsvcrt-ruby18 /mnt/c/ruby/lib/ruby/1.8/i386-mswin32/ruby.h:670 から include されたファイル中, my_test.c:1 から: /mnt/c/ruby/lib/ruby/1.8/i386-mswin32/missing.h:64:1: 警告: "isinf" redefined /mnt/c/ruby/lib/ruby/1.8/i386-mswin32/win32/win32.h:56 から include されたファイル中, /mnt/c/ruby/lib/ruby/1.8/i386-mswin32/defines.h:184 から, /mnt/c/ruby/lib/ruby/1.8/i386-mswin32/ruby.h:22 から, my_test.c:1 から: /usr/lib/gcc/i686-pc-mingw32/3.4.4/../../../../i686-pc-mingw32/include/math.h:331:1: 警告: this is the location of the previous definition とリンク以前で失敗しました。 cygwinじゃなくてmsysのgccなら通るのかもしれませんが、もう 「config.hが違うんだからダメ」でいいじゃん、という気がしなくも ありません。 > * mingwではstaticリンク時とdynamicリンク時でdllimportを付 > けるか付けないかを変更する > > のいずれかではないかと思います。なんとなく後者の方が楽な気が > するんですが。[ruby-dev:27512]のパッチでそれができるってこと > なのかしら。 staticリンク時とdynamicリンク時で変えるんではなくて、リンク対象 のライブラリとペアになっているはずのヘッダに対応して変更します。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦