Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

c+-

Frischling

  • »c+-« ist der Autor dieses Themas
  • Private Nachricht senden

1

12.01.2014, 01:15

Zusätzliche Dateien im "kompilierten Ordner (Debug oder Release)" (C++)

Ich habe häufig gesehen, dass z.B. Installer nur aus einer .exe-Datei
bestehen, bei von Visual Studio kompilierten Programmen liegen aber
immer noch .obj-Dateien bei.

Deshalb habe ich einen "Release"-Ordner auf den Desktop kopiert und
alle Dateien außer der .exe-Datei entfernt, und das Programm lief
tadellos.

Jetzt sind meine Fragen:

Was bewirken die .obj-Dateien?

und

Ist es sinnvoller, die Dateien im Ordner zu belassen,
oder sie zu entfernen?

2

12.01.2014, 01:29

Die .obj-Dateien sind deine einzelnen .cpp-Quelltexte, vom Compiler übersetzt in ein maschinenlesbares Format. Die sind für die Ausführung deines Programms unerheblich, aber für den Compiler nötig um z.B. nur die Dateien neu zu kompilieren, die sich geändert haben (wo sollte er sonst die Dateien speichern, die sich NICHT geändert haben?). Du solltest sie also nicht mit deinem Programm verteilen.

Außerdem wird wahrscheinlich eine .pdb-Datei (Program DataBase) mit dem selben Namen deiner .exe angelegt werden. Das sind die Debugging-Informationen deines Programms. Die solltest du nicht mitverteilen, aber für dich selber speichern: Falls mal ein Benutzer einen Absturz haben sollte, kannst du mit Hilfe dieser Datei seinen Absturz untersuchen weil dort drinsteht, welche Klassen du benutzt und welche Namen deine Funktionen und Variablen haben. Jedes Mal wenn du den Debugger benutzt, werden solche Informationen aus dieser Datei geladen. Wenn du sie löschst oder durch eine neue Version ersetzt, die nicht mehr der Exe entspricht, kannst du auch nur noch mit direkten numerischen Adressen debuggen statt mit menschenlesbaren Namen.

c+-

Frischling

  • »c+-« ist der Autor dieses Themas
  • Private Nachricht senden

3

12.01.2014, 11:20

Danke :)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

4

12.01.2014, 14:03

Die .obj-Dateien sind deine einzelnen .cpp-Quelltexte, vom Compiler übersetzt in ein maschinenlesbares Format. Die sind für die Ausführung deines Programms unerheblich, aber für den Compiler nötig um z.B. nur die Dateien neu zu kompilieren, die sich geändert haben (wo sollte er sonst die Dateien speichern, die sich NICHT geändert haben?). Du solltest sie also nicht mit deinem Programm verteilen.

Um genau zu sein sind die .obj-Dateien das was aus dem Compiler rauskommt und anschließend in den Linker geht, der dann alles zu zusammen setzt.

5

14.01.2014, 08:10

Um genau zu sein sind die .obj-Dateien das was aus dem Compiler rauskommt und anschließend in den Linker geht, der dann alles zu zusammen setzt.
Wo ist das „genau“? Schließlich kommt aus dem Compiler noch mehr raus, und in den Linker geht noch mehr rein, und er kann mehr mehr machen als das zusammenzusetzen, und weniger detailliert ist diese Erklärung auch ;-)

Tobiking

1x Rätselkönig

  • Private Nachricht senden

6

14.01.2014, 12:34

Um genau zu sein sind die .obj-Dateien das was aus dem Compiler rauskommt und anschließend in den Linker geht, der dann alles zu zusammen setzt.
Wo ist das „genau“? Schließlich kommt aus dem Compiler noch mehr raus, und in den Linker geht noch mehr rein, und er kann mehr mehr machen als das zusammenzusetzen, und weniger detailliert ist diese Erklärung auch ;-)

Ich wollte damit nur klarstellen, dass die obj-Dateien ein Zwischenprodukt sind, das existiert weil Compiler und Linker voneinander getrennt sind. Das der Compiler merkt, dass bestimmte Dateien noch aktuell sind ist für mich eher ein Nebeneffekt. Das Änderungsdatum der einzelnen Übersetzungseinheiten könnte sich der Compiler auch gesammelt in eine Datei schreiben.

Das "zusammensetzen" die Arbeit des Linkers nicht mehr gerecht wird, sehe ich ein. Aber was siehst du denn noch großartig an Ausgaben bzw. Eingaben bei Compiler und Linker? Optional kann der Compiler natürlich noch Debug Symbole erzeugen und der Linker externe Bibliotheken entgegen nehmen, aber sonst?

7

14.01.2014, 13:44

Ich wollte damit nur klarstellen, dass die obj-Dateien ein Zwischenprodukt sind, das existiert weil Compiler und Linker voneinander getrennt sind.
Ah, alles klar.

Werbeanzeige