木村です。 思い出した範囲で書いていきます In: [ruby-list:9237] >> #ただし共用はできません > >cygwin32で作ったDLL は、VC++ で作った ruby.exe では使えない >という意味ですか? そうです。実体が入ったインタープリターがrubymw.dll/rubygw.dllと 違ってたりしますから。 >libruby.lib をリンクしたときと、ruby.lib をリンクしないように libruby.libは、「rubymw.dllを作らずに、単一のruby.exeですませる ときに使う」ライブラリで、「ruby.libは最終的にruby.libを作るとき にできるおまけみたいな」ライブラリだったとおもいます。つまり、拡張 DLLとリンクするには条件があっていません。 makefileをそのまま使うと通常は ruby.exe rubymw.dll と二つのファイルを作ります。拡張DLLを作るときのリンクで必要になる のは rubymw.dllを作成したときに一緒にできたライブラリだったと思い ます。 makefileのruby.exeのルールのところににある $(CC) $(LDFLAGS) $(MAINOBJ) -o ruby.exe rubymw.lib -link /STACK... ^^^^↑^^^^ これです。 >LIBC.lib(dllcrt0.obj) : error LNK2005: __amsg_exit はすでに LIBC.lib(crt0.obj) >で定義されています この辺のエラーは、先に書いた条件の問題によるものです。 それと、実に悩ましい問題があって、一度目のbuildは絶対に失敗した と思います。なぜかというと、rubymw.dllを作るタイミングは各種拡張 モジュールを作成した後なのに、拡張モジュールのDLLを作成するとき にはrubymw.libが存在しないので「必ず」リンクで失敗するのですね。 これが。一度rubymw.libができてしまえば問題はなくなるんですが。 -- 木村浩一 May the source be with you. e-mail kbk / kt.rim.or.jp kkimura / pure.cpdc.canon.co.jp