我试图了解 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
并不是为了显示此类文件的更多有用信息而设计的。)
有些包含目标文件,它们是静态库。其他包含符号,它们是导入库。 (有一个 short explanation here 。)
因此静态库在 Linux 上似乎等同于 .a
文件,而 DLL 在 Linux 上似乎映射到 .so
文件。 (顺便说一句,导入库如何适应这张 Windows/Linux 等效图片?)
现在我想知道为什么会这样?为什么 Microsoft 决定为导入库提供与静态库相同的文件扩展名? (我知道从历史上看,静态库是第一个,就像原始生命形式先于更复杂的形式一样。)他们为什么不说,好吧,这是这些新类型的库,它们应该被称为导入库,它们应该带有文件扩展名 .ILB
(或其他)?
最佳答案
因为它们是图书馆。为什么要发明一个全新的特定于供应商的扩展,用于与他们已经特定于供应商的库完全相同的东西?
关于c - 为什么 LIB 文件是具有这种口是心非性质的野兽?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6421693/