next up previous contents
Nächste Seite: Die Compiler f95 / Aufwärts: Programmübersetzung Vorherige Seite: Compiler   Inhalt

Linker und Lader

Objektmodule, wie sie z.B. der Compiler erzeugt, stellen Folgen von Maschinencodebefehlen dar. Alle Referenzen sind relativ zum Modulanfang adressiert und somit noch nicht an feste Speicheradressen gebunden (verschiebbar -- ,,relocatable``). Große Programme bestehen im allgemeinen aus mehreren Objektmodulen. Sie kommen aus getrennter Übersetzung der Programmbausteine (Hauptprogramm, Unterprogramme) oder aus bestehenden Objektmodul-Bibliotheken (,,libraries``).

Der Linker verbindet nun mehrere Objektmodule zu einem lauffähigen Programm (Lademodul). Dabei werden die Adressen dieser Module so modifiziert, dass ein einheitliches Gebilde entsteht. Gleichzeitig stellt der Linker die logischen Bezüge zwischen den einzelnen Objektmodulen her, indem er Referenzen auflöst, die auf Adressen in anderen Modulen verweisen. Solche externen Referenzen bleiben bei der Übersetzung zunächst offen und werden in den Symboltabellen gekennzeichnet. Kann der Linker diese Bezüge nicht befriedigen (d.h. er findet die gerufenen Unterprogramme nicht), erscheint eine Fehlermeldung (z.B. ,,unsatisfied external reference ...``). Das Lademodul enthält den verschiebbaren Code (,,relocatable code``) des Lademoduls sowie eine Ladeliste (,,load map``) mit Angaben über die Positionen der Objektmodule innerhalb des Lademoduls. Bei anderen Lösungen wird eine Liste mit allen Symbolen, die relativ zum Anfang des Lademoduls adressiert sind, aufgebaut.

Der Lader (,,loader``) schließlich ordnet dem Lademodul absolute Adressen im Hauptspeicher zu und transportiert es dorthin.


next up previous contents
Nächste Seite: Die Compiler f95 / Aufwärts: Programmübersetzung Vorherige Seite: Compiler   Inhalt
Lars Tornow 2003-04-02