Zum Inhalt springen

Linker (Computerprogramm)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 10. April 2007 um 19:09 Uhr durch Head (Diskussion | Beiträge) (hat Linker (Programm) nach Linker verschoben: keine Begriffsklärung). Sie kann sich erheblich von der aktuellen Version unterscheiden.

Unter einem Linker oder Binder (auch: "Bindelader") versteht man ein Programm, das einzelne Programmmodule zu einem ausführbaren Programm zusammenstellt (verbindet).

Die meisten Programme enthalten Bestandteile oder Module, die auch in anderen Programmen Verwendung finden können. Mehrere kompilierte Module mit Funktionen (so genannte Objektdateien) können zu Funktionsbibliotheken (Programmbibliotheken) zusammengefasst werden. Der Code wird vom Linker zum Hauptprogramm hinzugefügt, falls die entsprechende Funktion benötigt wird.

Um ein Programm-Modul in einem anderen Programm verwenden zu können, müssen die symbolischen Adressen der Funktionen und Variablen des Moduls in Speicheradressen umgewandelt werden. Diese Aufgabe übernimmt der Linker. Der Linkvorgang erfolgt nach der Kompilation und ist meistens der letzte Arbeitsschritt zur Erstellung eines Programms.

Man unterscheidet generell zwischen statischem und dynamischem Linken.

Statisches Linken

Das statische Linken ist ein Vorgang, der typischerweise während der Entwicklung des Programms erfolgt, so dass der Benutzer ein fertig zusammengesetztes Programm erhält. Dies besteht dann bei vollständig statisch gelinkten Programmen aus einer einzelnen Datei.

Modernere Versionen aktueller C-Bibliotheken unter Unix-artigen Betriebssystemen unterstützen statisches Linken oft nicht mehr vollständig. So erzwingt beispielsweise die GNU/Linux-glibc ein dynamisches Linken bei Modulen, die die Authentifizierung von Benutzern betreffen. Obwohl ein derart gelinktes Programm fast alle Module bereits enthält, ist es so dennoch auf die Anwesenheit einer passenden "Laufzeitversion" der glibc angewiesen.

Dynamisches Linken

Es ist auch möglich, das Auflösen der Funktions- und Variablennamen zu verschieben, bis das Programm tatsächlich ausgeführt wird. In diesem Fall spricht man von "dynamically linked library" (DLL) oder "shared library". Dies hat den Vorteil, dass man die Bibliothek nachträglich leicht austauschen kann, die Programme kleiner werden, und dass der Speicher nur einmal benötigt wird, wenn mehrere Programme dieselbe Bibliothek verwenden. Der Nachteil besteht darin, dass man irgendwie sicherstellen muss, dass auch die richtige DLL in der richtigen Version installiert ist.

Mischformen der statischen und dynamischen Link-Art sind der Normalfall. Bei solchen Programmdateien findet der Linkvorgang praktisch zweimal statt: Einmal durch den Entwickler, und ein zweites Mal - unsichtbar - beim Anwender während der Ausführung. Im Regelfall werden die Namen der benötigten externen Bibliotheken beim ersten Linkvorgang fest einkodiert; es ist aber auch möglich, dass das Programm nach Überprüfung der vorhandenen Bibliotheken während der Laufzeit wahlweise einzelne nachlädt oder auch nicht. Solche nachgeladenen Bibliotheken werden oft als Plug-Ins bezeichnet.

Auf IBM-Großrechnersystemen wird der Linker auch "linkage editor" (englisch) genannt.

Namenskonflikte

Bei der von Unix über die Programmiersprache C verbreiteten Art und Weise des Linkens entsteht ein einziger großer, nicht-hierarchischer, gemeinsamer Namensraum. Dadurch kommt es bei großen oder sehr verzweigten Projekten in der Regel zu Namenskonflikten. Für diese Fälle waren früher weak links üblich, bei denen die Linkreihenfolge entscheidet, welches Modul wo verwendet wird. Dies ist heute unüblich, ist aber zwingend beim Ersetzen von Funktionen der libc (z.B. malloc). Einige Programmiersprachen, wie z.B. C++ lösen das Problem dadurch, dass Modulinhalte über hierarchisch aufgebaute Namen angesprochen werden. Ungelöst bleibt damit jedoch beispielsweise das Problem der Anwesenheit einer Bibliothek in verschiedenen Versionen; das Problem ist zum Zeitpunkt des Linkens nur dadurch lösbar, dass dem Linker je nach benötigter Bibliothek unterschiedliche Suchpfade mitgegeben werden; jede der in Frage kommenden Bibliotheken unterscheidet sich zwar von der Bezeichnung her, ist aber inhaltlich für einen Linker ununterscheidbar, da in ihr die gleichen Symbole vorhanden sind. Nach dem ersten, statischen Linken ist die Angelegenheit dagegen unproblematisch, da sich die verwendete Bibliothek von da an anhand ihres Namens aufrufen lässt.