Avatar ·

Wie funktioniert der Kompilierungs- und Linkprozess in C++?

Hallo zusammen! Ich habe vor nicht allzu langer Zeit angefangen, C++ zu lernen, und bin verwirrt darüber, was passiert, nachdem ich den "Build"-Button drücke oder g++ im Terminal ausführe. Ich habe ein einfaches Programm aus zwei Dateien geschrieben: `main.cpp` und `utils.cpp`. In `utils.cpp` habe ich eine Funktion `void sayHello()`, die "Hello!" in der Konsole ausgibt. In `main.cpp` deklariere ich diese Funktion als extern (`extern void sayHello();`) und rufe sie auf. Wenn ich das mit dem Befehl `g++ main.cpp utils.cpp -o program` kompiliere, funktioniert alles. Aber ich verstehe nicht, was genau der Compiler macht und was der Linker. Warum bekomme ich, wenn ich einen Tippfehler in der Funktionsdeklaration mache (z.B. `sayHelllo` schreibe), einen Fehler während des Linkens und nicht während der Kompilierung? Und woher kommen die .o-Dateien, die manchmal im Projektordner auftauchen? Besonders verwirrt mich