Wie hängen .lib- und .obj-Dateien zusammen? Was ist ihr Zweck? Ist eine .lib nur eine Sammlung von .obj-Dateien? Wenn ja, werden die .obj-Dateien dann in der .lib gespeichert, wodurch die .obj-Dateien überflüssig werden?
Antworten
Zu viele Anzeigen?Typischerweise beziehen sich die .obj
Dateien auf Objektdateien. Dies ist eine Quelldatei in kompilierter Form. Zum Beispiel würden eine main.cpp
und eine foo.cpp
eine main.obj
und eine foo.obj
erzeugen.
Dann ist es die Aufgabe des Linkers, sie miteinander zu verknüpfen, so dass main.obj
auf in foo.obj
definierte Funktionen zugreifen kann und umgekehrt. Der Linker gibt Ihre Binärdatei aus, die die .lib
(oder .a
, oder .exe
, oder .dll``, etc) ist.
Also im weitesten Sinne, ja, die binäre Ausgabe (.lib
in Ihrem Fall) ist die Sammlung verknüpfter .obj
Dateien. Sobald Sie mit dem Kompilieren fertig sind und die Bibliothek verwenden möchten, benötigen Sie nur andere Programme, die mit der .lib
verknüpfen. Die .obj
Dateien gelten als Zwischendateien und werden nach Abschluss des Linkvorgangs nicht mehr benötigt.
Dies hängt davon ab. Wenn die .lib-Datei eine statische Bibliothek ist, handelt es sich im Grunde genommen nur um eine Sammlung von .obj-Dateien. Wenn Sie eine DLL erstellen oder verwenden, ist die .lib-Datei nur eine Importbibliothek mit Informationen darüber, welche Symbole in der entsprechenden DLL verfügbar sind.
Ja, eine .lib-Datei ist einfach eine Sammlung von .obj-Dateien. Mit dem Inhalt der .obj-Dateien wurde nichts gemacht, die beste Analogie ist ein .zip-Archiv. Ja, du kannst die .obj-Dateien nach Erstellen der .lib löschen, da die .lib eine wortgetreue Kopie der .obj-Dateien enthält.
Sei vorsichtig, wenn du eine .lib zur Verteilung deines Produkts verwendest, dann musst du in der Regel 4 davon erstellen. Debug- gegen Release-Build und die zwei Varianten des CRT (/MT vs /MD).