8 Stimmen

Was ist das Verhältnis von .lib und .obj zueinander und zu meinem Projekt in C++?

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?

12voto

GManNickG Punkte 476445

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.

2voto

Dietrich Epp Punkte 193178

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.

1voto

Hans Passant Punkte 894572

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).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X