- Statisches Binden
-
Unter einem Linker oder Binder (auch: „Bindelader“) versteht man ein Programm, das einzelne Programmmodule zu einem ausführbaren Programm zusammenstellt (verbindet). Auf IBM-Großrechnersystemen wird der Linker linkage editor (englisch) genannt.
Die meisten Programme enthalten Bestandteile oder Module, die 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 Programmmodul 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 Kompilierung 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 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 die Bibliothek nachträglich leicht ausgetauscht werden 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 sichergestellt werden muss, dass die richtige DLL in der richtigen Version installiert ist. Zum Teil kann das Linken zur Laufzeit des Programmes erfolgen.
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.
Namenskonflikte
Bei dem Vorgang des Linkens entsteht ein einziger großer, nicht-hierarchischer, gemeinsamer Namensraum. Dadurch kommt es bei großen oder sehr verzweigten Projekten oft zu Namenskonflikten. Für diese Fälle sind weak links üblich, bei denen die Linkreihenfolge entscheidet, welches Modul wo verwendet wird. 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.
Wikimedia Foundation.