www.wikidata.de-de.nina.az
Unter einem Linker oder Binder auch Bindelader versteht man ein Computerprogramm das einzelne Programmmodule zu einem ausfuhrbaren Programm zusammenstellt verbindet Auf IBM Grossrechnersystemen wird der Linker linkage editor englisch genannt 1 Bibliotheken lib und oder Objektdateien obj werden vom Linker zu Bibliotheken Dynamischen Bibliotheken dll oder ausfuhrbaren Dateien exe zusammengefugt gelinkt Die meisten Programme enthalten Bestandteile oder Module die in anderen Programmen Verwendung finden konnen Mehrere kompilierte Module mit Funktionen so genannte Objektdateien konnen zu Funktionsbibliotheken Programmbibliotheken zusammengefasst werden Der Code wird durch den Linker zum Hauptprogramm hinzugefugt falls die entsprechende Funktion benotigt wird Um ein Programmmodul in einem anderen Programm verwenden zu konnen mussen die symbolischen Adressen der Funktionen und Variablen des Moduls in Speicheradressen umgewandelt werden Diese Aufgabe ubernimmt 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 Inhaltsverzeichnis 1 Statisches Linken 2 Dynamisches Linken 3 Sprachspezifische Varianten beim Laden 3 1 Uberladen 3 2 Uberschreiben 4 Namenskonflikte 5 Literatur 6 Weblinks 7 EinzelnachweiseStatisches Linken BearbeitenDas statische Linken ist der Vorgang der typischerweise am Ende der Entwicklung des Programms erfolgt Das Ergebnis ist ein fertig zusammengesetztes Programm Dieses besteht bei vollstandig statisch gelinkten Programmen aus einer einzigen Datei Beim statischen Linken wird die Programmmoduleauflosung der Anwendung zum Entwicklungszeitpunkt einmalig durchgefuhrt im Gegensatz zum dynamischen Linken bei dem dies jedes Mal zur Laufzeit geschieht Ein Vorteil ist beim statischen Linken eine erhohte Portabilitat einer Anwendung da diese nicht auf die Bereitstellung von Programmmodulen z B durch das Betriebssystem angewiesen ist da die Anwendung diese selbst mitfuhrt Eine Installation des Programms ist somit nicht erforderlich 2 Nachteile sind ein potentiell hoherer Speicherbedarf da Programmmodule nicht von anderen Programmen mitverwendet werden konnen als auch die Notwendigkeit die Gesamtanwendung neu zu kompilieren und zu linken falls fur ein Teilmodul eine verbesserte Version herausgegeben wurde 3 Wegen dieser Nachteile unterstutzen einige C Bibliotheken unter Unix artigen Betriebssystemen das statische Linken oft nicht mehr vollstandig 3 So erzwingt beispielsweise die glibc ein dynamisches Linken bei Modulen die die Benutzerauthentifizierung betreffen Programme die diese Module verwenden sind immer auf die Anwesenheit einer passenden Laufzeitversion der glibc angewiesen Dynamisches Linken BearbeitenEs ist auch moglich das Auflosen der Funktions und Variablennamen zu verschieben bis das Programm tatsachlich ausgefuhrt wird In diesem Fall spricht man von dynamischem Linken Je nach Betriebssystem geschieht dies durch das Laden vollstandiger dynamischer Bibliotheken auch bekannt als Dynamic Link Library DLL oder shared library oder das gezielte Laden eines Unterprogramms aus einer Programmbibliothek Dies hat den Vorteil dass Bibliotheken oder Programme nachtraglich leicht ausgetauscht werden konnen die aufrufenden Programme kleiner werden und der Speicher nur einmal benotigt wird wenn mehrere Programme dieselben Komponenten verwenden Der Nachteil besteht darin dass sichergestellt werden muss dass die richtige Bibliothek in der richtigen Version installiert ist siehe z B DLL Konflikt Nachgeladene Bibliotheken werden oft als Plug ins bezeichnet Mischformen der statischen und dynamischen Link Art sind der Normalfall Dabei werden gewisse Unterprogramme dem aufrufenden Programm statisch hinzugebunden andere werden dynamisch nachgeladen Sprachspezifische Varianten beim Laden BearbeitenUberladen Bearbeiten Unter Uberladen wird das mehrfache Definieren eines Unterprogramms mit gleichem Bezeichner in Abhangigkeit von der Parameterauswahl verstanden realisiert durch interne Umbenennung engl name mangling Die nachstehenden Beispiele sind nur in C oder Java moglich nicht aber in reinem C wo die Uberladung von Funktionen nicht vorgesehen ist und der Versuch eine solche zu verlangen einen Ubersetzungsfehler auslosen wurde Die Funktion void function int x ist eine ganzlich andere als void function float x Beide Funktionen haben verschiedene Implementierungen verschiedene Bezeichnungen in der Objektdatei und haben nichts weiter miteinander zu tun als dass sie den gleichen Namen tragen Uberladen ist also nur der Funktionsname Problematisch fur das Verstandnis und fur den Ubersetzer sind Aufrufe folgender Art short y function y Hier muss der Ubersetzer entscheiden ob er eine Typumwandlung cast nach int oder nach float durchfuhrt und die entsprechende Variante der Funktion aufruft Naheliegend ware der erste Fall dennoch hangt hier einiges vom verwendeten Ubersetzer ab der Programmierer ahnt nicht was sich im Untergrund des Maschinencodes tut Einige Ubersetzer wahlen in solchen Fallen das mutmasslich Richtige was im konkreten Fall falsch sein kann andere Ubersetzer beispielsweise GNU neigen eher dazu einen Fehler auszugeben um vom Anwender eine Entscheidung zu verlangen Er muss die Auswahl dann mit einer Schreibweise wie function float y per Typumwandlung festlegen Im Allgemeinen ist es besser die Moglichkeit des Uberladens nicht zu frei zu nutzen sondern nur fur deutliche Unterschiede wie Varianten von Unterprogrammen mit unterschiedlicher Parameteranzahl Aber auch hier fuhrt die Kombination mit Parametern mit default Argumenten zu Irritationen Als sicher kann ein parametersensitiver Funktionsaufruf mit Zeigern verschiedenen Types die nicht uber Basisklassen Vererbung ableitbar sind bezeichnet werden Hier pruft der Ubersetzer jedenfalls die Zeigertyprichtigkeit und meldet entweder einen Fehler oder verwendet genau das passende Unterprogramm class ClassA class ClassB function class A Ist deutlich unterschieden von function class B wenn ClassA und ClassB in keiner Weise voneinander abgeleitet vererbt sind Uberschreiben Bearbeiten Mit dem vom Uberladen zu unterscheidenden Uberschreiben wird ein dynamisches Binden bezeichnet das im Programmablauf entsprechend reagiert wenn im Quelltext eine Methode d h ein Unterprogramm einer Basisklasse von der gleichnamigen und gleich parametrisierten Methode der abgeleiteten Klasse uberdeckt wird Zur Laufzeit wird diejenige Methode gerufen die der Instanz der Daten entspricht Das wird durch die Tabelle virtueller Methoden ermoglicht einem Grundkonzept der Implementation von objektorientierter Programmierung Namenskonflikte BearbeitenBei dem Vorgang des Linkens entsteht ein einziger grosser nicht hierarchischer gemeinsamer Namensraum Dadurch kommt es bei grossen oder sehr verzweigten Projekten oft zu Namenskonflikten Fur diese Falle sind weak links ublich bei denen die Linkreihenfolge entscheidet welches Modul wo verwendet wird Programmiersprachen wie z B C losen das Problem dadurch dass Modulinhalte uber hierarchisch aufgebaute Namen angesprochen werden Ungelost bleibt damit jedoch beispielsweise das Problem der Anwesenheit einer Bibliothek in verschiedenen Versionen das Problem ist zum Zeitpunkt des Linkens nur dadurch losbar dass dem Linker je nach benotigter Bibliothek unterschiedliche Suchpfade mitgegeben werden jede der in Frage kommenden Bibliotheken unterscheidet sich zwar von der Bezeichnung her ist aber inhaltlich fur 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 lasst Literatur BearbeitenLeon Presser John R White Linkers and Loaders In ACM Computing Surveys Band 4 3 Sept 1972 ISSN 0360 0300 S 149 167 berkeley edu PDF 1 3 MB John R Levine Linkers and Loaders Morgan Kauffman San Francisco 1999 ISBN 1 55860 496 0 Stanley B Lippman C Primer Addison Wesley Longman Amsterdam 2005 ISBN 0 201 72148 1 Randal E Bryant David R O Hallaron Computer Systems A Programmer s Perspective 3 Auflage insb Kapitel 7 Pearson Boston 2016 ISBN 978 0 13 409266 9 Weblinks BearbeitenBeginner s Guide to LinkersEinzelnachweise Bearbeiten IBM Corporation Hrsg Operating System 360 Linkage Editor Program Logic Manual New York 1967 Kapitel uber Hauptspeicher Folie 6 PDF informatik uni ulm de Betriebssysteme Vorlesung im Hauptstudium a b Ulrich Drepper Static Linking Considered Harmful redhat com archiviert vom Original am 21 Dezember 2004 abgerufen am 13 Januar 2012 englisch There are still too many people out there who think or even insist that static linking has benefits This has never been the case and never will be the case Normdaten Sachbegriff GND 4145562 9 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Linker Computerprogramm amp oldid 227844234