Der Linker



  • Hallo,

    ich weiß, die Frage wird einige hier erheblich zum gähnen bringen, jedoch habe ich die Aufgabe des Linkers noch nicht verstanden. Was macht dieser genau? Der Quellcode wird übersetzt, ok. Und was macht der Linker dann damit?

    THX im Vorraus!
    Michi



  • Hallo

    der Quellcode wird vom Compiler in Teilen übersetzt. In so genannte UE, Übersetzungseinheiten. Der Linker verbindet dann alle Teile zu einem endgültigen Programm, und sorgt dafür das auch externe Quellen richtig 'gelinkt' werden, also DLLs u.ä.

    bis bald
    akari



  • akari schrieb:

    der Quellcode wird vom Compiler in Teilen übersetzt. In so genannte UE, Übersetzungseinheiten.

    Übsertzungseinheiten sind die Teile, die der Compiler übersetzt und nicht das Ergebnis der Übersetzung. Der Linker verbindet also übersetzte Übersetzungseinheiten 😉



  • akari schrieb:

    und sorgt dafür das auch externe Quellen richtig 'gelinkt' werden, also DLLs u.ä.

    DLLs werden nun gerade nicht vom Linker eingebunden.



  • Dlls werden zwar zur Laufzeit geladen, jedoch muss man trotz dessen sicherstellen, dass die verwandten Symbole irgendwo definiert sind. Unter Windows gibt es dazu z.B. den Weg über eine Symbollib, unter Linux stellt der Linker ebenfalls sicher, dass alle Symbole auflösbar sind (auch wenn die zur Compilezeit in den .so-Files noch undefiniert sind).

    MfG Kimmi



  • Bei statischer Bindung einer dll muß natürlich die zugehörige lib (aber eben nicht die dll) eingebunden werden. Das macht der Linker. Bei dynamischer Bindung muß lediglich eine Headerdatei mit den Deklarationen rein. Alles andere erfolgt zur Laufzeit.



  • Stimmt natürlich, ich ging nur vom statischen Linken aus.

    MfG Kimmi


Anmelden zum Antworten