Я пытаюсь понять этот бизнес файл LIB в Microsoft Windows, и я только что сделал открытие, которое, я надеюсь, развеет путаницу, которая до сих пор мешала мне получить четкое представление об этой проблеме. Для этого 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
не предназначен для отображения более полезной информации для этого типа файла.)
Некоторые содержат объектные файлы, и они являются статическими библиотеками. Другие содержат символы, и они являются библиотеками импорта. (Здесь короткое объяснение здесь.)
Таким образом, статические библиотеки являются эквивалентами файлов .a
в Linux, а библиотеки DLL отображаются в файлы .so
в Linux. (Кстати, как импортировать библиотеки вписываются в это изображение эквивалентности Windows/Linux?)
Теперь мне интересно, почему это так? Почему Microsoft решила предоставить библиотекам импорта то же расширение файла, что и статические библиотеки? (Я понимаю, что исторически статические библиотеки были первыми, так как примитивные формы жизни предшествовали более сложным формам.) Почему бы им не сказать, ладно, вот эти новые типы библиотек, они будут называться библиотеками импорта, и они будут иметь расширение файла .ILB
(или что-то еще)?