木村です。
思い出した範囲で書いていきます

	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