Wie funktioniert ein Linker?
-
Ich wollte die Frage schon seit längerem stellen wie funktioniert ein Linker. Ich habs immer noch nich ganz begriffen, ich weiß das ein Linker bereits kompilierte, oder assemblierte Objekt Datei. Mit dem Linker zu einem Programm zusammen gesetzt wird, aber wie funktioniert das dann genau, und was muss ich beachten, wenn ich in C++ mehrere .cpp Dateien habe? Kann man die, dann genau so benutzen wie Header Dateien, (eher nicht ich habs schon ausprobiert).
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Die Objektdateien enthalten halt die Funktionen, die in der entsprechenden Quellcodedatei definiert wurden, in Maschienencode. Dabei sind auch Funktionsaufrufe von Funktionen, die in einer anderen Datei definiert wurden. Der Linker setzt dann einfach alle Objektdateien zusammen und passt die Funktionsaufrufe an.
Damit das funktioniert muss der Compiler vorher natürlich schon wissen, wie die Funktion aufgerufen werden muss. Daher muss die Funktion überall wo sie benutzt wird deklariert sein, weswegen man dies meist in einem Header macht. Der Header wird nämlich einfach per Textersetzung in den Quellcode eingefügt und zählt somit dazu.
Damit es keine Konflikte gibt, dürften Funktionen nur einmalig definiert sein. Sonst weiß der Compiler nicht welche Funktion mit dem Funktionsaufruf gemeint ist. Daher eignet es sich im Allgemeinen (Ausnahme inline) nicht Funktionsdefinitionen in einen Header zu schreiben, da diese Funktion somit mehrmals definiert wird.
-
Ok so weit so gut, aber wie verwende ich das dann bei einer cpp Datei was gibt es zu beachten, wenn man den Quelltext auf mehrere cpp Dateien auslagert?
-
BigGreenFoot schrieb:
Ok so weit so gut, aber wie verwende ich das dann bei einer cpp Datei was gibt es zu beachten, wenn man den Quelltext auf mehrere cpp Dateien auslagert?
Zu beachten ist eigentlich nur das was ich bereits geschrieben habe: Deklaration überall wo die Funktion aufgerufen wird, Definition nur einmal pro "Projekt". Und das bekommt man relativ einfach mit der Konvention nur Deklarationen im Header und Definitionen in den cpp Dateien.
-