una propias propia librerias libreria library incluir create crear compile compilar como borland biblioteca c dll shared-libraries static-libraries

propias - ¿Por qué los archivos LIB son bestias de una naturaleza tan engañosa?



create libraries c++ (1)

Porque son bibliotecas. ¿Por qué inventar una nueva extensión específica del proveedor para lo que es exactamente lo mismo que sus bibliotecas ya vendidas?

Estoy tratando de entender este negocio de archivos LIB en Microsoft Windows, y acabo de hacer un descubrimiento que, espero, disipará la confusión que hasta ahora me ha impedido obtener una comprensión clara del problema. A saber, los archivos LIB no son el único tipo de archivo que su extensión de archivo sugiere que son.

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

Los primeros dos ejemplos contienen archivos de objeto (que aparecen como rutas relativas o absolutas cuando se muestran con la utilidad lib.exe ). El tercer ejemplo, sin embargo, solo contiene 731 referencias a una DLL. (Supongo que lib.exe no está diseñado para mostrar más información útil para este tipo de archivo).

Algunos contienen archivos objeto, y son bibliotecas estáticas. Otros contienen símbolos, y son bibliotecas de importación. (Aquí hay una breve explicación ).

Así que las bibliotecas estáticas parecen ser los equivalentes de los archivos .a en Linux, y las DLL parecen .so archivos .so en Linux. (Por cierto, ¿cómo encajarían las bibliotecas de importación en esta imagen de equivalencia de Windows / Linux?)

Ahora me pregunto por qué es así? ¿Por qué Microsoft decidió otorgar a las bibliotecas de importación la misma extensión de archivo que las bibliotecas estáticas? (Entiendo que, históricamente, las bibliotecas estáticas fueron primero, al igual que las formas primitivas de vida precedieron a las formas más complejas). ¿Por qué no dirían, está bien, aquí están estas nuevas clases de bibliotecas, se las llamará bibliotecas de importación, y deberán llevar la extensión de archivo .ILB (o lo que sea)?