Perché le file di LIB sono bestie di natura così duplice?

Sto cercando di capire questo business di file LIB su Microsoft Windows, e ho appena fatto una scoperta che – spero – dissiperà la confusione che finora mi ha impedito di comprendere chiaramente il problema. Per intenderci, i file LIB non sono l’unico tipo di file che la loro estensione di file suggerisce di essere.

:: 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 

I primi due esempi contengono file object (che appaiono come percorsi relativi o assoluti quando visualizzati dall’utilità lib.exe ). Il terzo esempio, tuttavia, contiene solo 731 riferimenti a una DLL. (Immagino che lib.exe non sia progettato per mostrare più informazioni utili per questo tipo di file.)

Alcuni contengono file object e sono librerie statiche. Altri contengono simboli e sono librerie di importazione. (C’è una breve spiegazione qui .)

Quindi le librerie statiche sembrano essere gli equivalenti dei file .a su Linux e le DLL sembrano mappare su file .so su Linux. (A proposito, come sarebbero importate le librerie in questa immagine di equivalenza di Windows / Linux?)

Ora mi chiedo perché sia ​​così? Perché Microsoft ha deciso di fornire alle librerie di importazione la stessa estensione di file delle librerie statiche? (Capisco che storicamente, le librerie statiche erano le prime, come forms primitive di vita precedute da forms più complesse.) Perché non direbbero, okay, ecco questo nuovo tipo di librerie, saranno chiamate librerie di importazione, e dovranno recare l’estensione del file .ILB (o qualsiasi altra cosa)?

    Perché sono librerie. Perché inventare un’intera nuova estensione specifica del fornitore per ciò che è esattamente la stessa cosa delle loro librerie già vendor-specifiche?