From: Katsuyuki Komatsu Date: 2000-07-05T08:00:58+09:00 Subject: [ruby-dev:10210] Re: don't use mktemp() 小松です。 In the message of [ruby-dev:10207] Re: don't use mktemp() on 2000/7/5 "Shigeo Kobayashi" wrote: > > コメントみたいなものかなとも思えますが、LIBRARY の方の役割がよ > > く分かりません。 EXPORTS足してmakeできた時点で安心して、LIBRARYを足すのを 忘れてました。 DESCRIPTIONはrubymw.dllのどこかに出力されるかと思いましたが、 見あたりませんでした。ほんとにコメントとしか扱われていない ようです。 > Windows の EXE と DLL は基本的に同じ構造をもっています。 > 従って、 EXE に対しても、それが Window 関数等のコールバッ > ク(つまり、EXE の外から呼ばれるもの)を外部に提示するとき > には DEF ファイルが必要になります。で、DEF ファイルが DLL > 用のときは LIBRARY 文が、EXE 用の時には NAME 文をいれ > てリンカに区別させます(結局何が違うの? といわれると...)。 NAMEとLIBRARYの違いは拡張子を省略したときに、 NAME rubymw → rubymw.exe LIBRARY rubymw → rubymw.dll とみなされるという点だけみたいです。 NAME rubymw.dllと書いてもOKでした。 デフォルトは.defのbasename + ".lib"。 LIBRARYがある場合とない場合でインポートライブラリを、 lib -nologo /OUT:rubymw.lib /DEF:ruby.def として作り、拡張ライブラリを作ってdumpbin -importsで見ると、 以下のようになります。 ※の所を見るとわかるように、ないとまずいですね。 ruby.defをrubymw.defに変えるという手もありますが。 □LIBRARY rubymw.dllがある場合 C:\lang\ruby-1.5.4\ext\tcltklib>dumpbin /imports tcltklib.so …… Dump of file tcltklib.so File Type: DLL Section contains the following imports: …… rubymw.dll ← ※ 10006330 Import Address Table 1000610C Import Name Table 0 time date stamp 0 Index of first forwarder reference C:\lang\ruby-1.5.4\ext\tcltklib> □LIBRARY rubymw.dllがない場合 C:\lang\ruby-1.5.4\ext\tcltklib>dumpbin /imports tcltklib.so …… Dump of file tcltklib.so File Type: DLL Section contains the following imports: …… ruby.dll ← ※ 10006330 Import Address Table 1000610C Import Name Table 0 time date stamp 0 Index of first forwarder reference C:\lang\ruby-1.5.4\ext\tcltklib> -- 小松克行 / Katsuyuki Komatsu