web-dev-qa-db-ja.com

なぜLIBファイルはそのような重複した性質の獣なのですか?

私はMicrosoftWindowsでこのLIBファイルビジネスを理解しようとしていますが、これまで問題を明確に把握できなかったという混乱を払拭することを発見しました。つまり、LIBファイルは、ファイル拡張子が示唆する種類のファイルではありません。

:: cd "C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib"

:: lib /nologo /list Ad1.Lib
obj\i386\activdbgid.obj
obj\i386\activscpid.obj
obj\i386\ad1exid.obj
obj\i386\dbgpropid.obj
obj\i386\dispexid.obj

:: lib /nologo /list oledb.lib
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbnewiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\cmdtreeiid.obj
o:\winmain.obj.x86fre\enduser\…\oledb\uuid\objfre\i386\oledbdepiid.obj

:: lib /nologo /list AdvAPI32.Lib | sort | uniq -c
    731 ADVAPI32.dll

最初の2つの例には、オブジェクトファイルが含まれています(lib.exeユーティリティによって表示されると相対パスまたは絶対パスとして表示されます)。ただし、3番目の例には、DLLへの731個の参照しか含まれていません。 (lib.exeは、この種のファイルについてより有用な情報を表示するようには設計されていないと思います。)

一部にはオブジェクトファイルが含まれており、それらは静的ライブラリです。その他にはシンボルが含まれており、それらはインポートライブラリです。 ( ここに簡単な説明 があります。)

したがって、静的ライブラリはLinuxの.aファイルと同等であるように見え、DLLはLinuxの.soファイルにマップされているように見えます。 (ちなみに、インポートライブラリはこのWindows/Linuxの同等の図にどのように適合しますか?)

今、私はこれがなぜそうなのか疑問に思っていますか?マイクロソフトがインポートライブラリに静的ライブラリと同じファイル拡張子を付けることにしたのはなぜですか? (歴史的に、静的ライブラリが最初であったことを理解しています。原始的な生命の形態がより複雑な形態に先行するように。)なぜ、これらの新しい種類のライブラリは、インポートライブラリと呼ばれ、インポートライブラリと呼ばれるのでしょうか。ファイル拡張子.ILB(または何でも)を付けますか?

50
Lumi

彼らはareライブラリだからです。すでにベンダー固有のライブラリとまったく同じもののために、まったく新しいベンダー固有の拡張機能を発明するのはなぜですか?

8
Blindy