我正在尝试了解 Microsoft Windows 上的 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
前两个示例包含目标文件(当由lib.exe
公用事业)。然而,第三个示例仅包含 731 个对 DLL 的引用。 (我猜lib.exe
并非旨在显示此类文件的更多有用信息。)
有些包含目标文件,它们是静态库。其他包含符号,它们是导入库。 (有一个这里有简短的解释 https://stackoverflow.com/questions/2240737/2240777#2240777.)
所以静态库似乎相当于.a
Linux 上的文件,DLL 似乎映射到.so
Linux 上的文件。 (顺便问一下,导入库如何适应这个 Windows/Linux 等效图?)
现在我想知道为什么会这样?为什么 Microsoft 决定为导入库提供与静态库相同的文件扩展名? (我知道,从历史上看,静态库是第一位的,就像生命的原始形式先于更复杂的形式一样。)为什么他们不说,好吧,这是这些新型库,它们将被称为导入库,并且它们将带有文件扩展名.ILB
(管他呢)?
因为他们are图书馆。为什么要发明一个全新的特定于供应商的扩展,因为它与已经特定于供应商的库完全相同?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)