Nun wurde im letzten Kapitel bereits erwähnt, dass die eigenen Module, die man schreibt,
mit Bibliotheken gebunden werden.
Dementsprechend wollen wir uns im nächsten Schritt anschauen, was Bibliotheken sind.
Dabei fangen wir mit statischen Bibliotheken an.
Eine statische Bibliothek ist im Wesentlichen nur ein Archiv, in dem mehrere Objektdateien
zusammengefasst sind.
Außerdem wird eine neue Symboltabelle erzeugt, über alle Objektdateien, die darin enthalten
sind.
In der Konvention ist der Name einer Bibliothek immer mit dem Präfix lib versehen und mit
dem Suffix.a.
Das heißt, die Bibliothekexample würde beschrieben werden als lib-example.a.
Um nun so ein Archiv zu erstellen, können wir auf das Kommandozeilenprogramm arr zurückgreifen.
Wenn wir arr mit den Optionen bindestrich rcs aufrufen, können wir als erstes weiteres
Argument den Namen der zu erstellenden Bibliothek angeben und alle weiteren Argumente sind die
einzelnen Objektdateien, die in dem Archiv zusammengefasst werden.
In diesem Beispiel bauen wir die statische Bibliothek lib-example.a aus den Objektdateien
bar.o und foo.o.
Möchte man nun eine Bibliothek in seinem Programm verwenden, muss man während des
Kompilierens die entsprechende Schnittstelle in Form einer Hedder-Datei zur Verfügung
haben.
Beim Binden hingegen braucht man direkt die Bibliothek.
Diese kann dem Binder über weitere Argumente bekannt gemacht werden.
So bindet man alle Module, die man selbst geschrieben hat und gibt als weitere Argumente
an den Binder, zum Beispiel bindestrich klein l, gefolgt von dem Namen der Bibliothek.
Macht man dies, so wird auf allen Suchpfäden nach der entsprechenden Bibliothek gesucht.
Dabei gibt es vorhin gestellte System-Suchpfade, zum Beispiel slash userlocallib, aber auch
weitere.
Der Name, den man bei der Option bindestrich klein l mit angibt, ist dabei der Name der
Bibliothek, wobei man den suffix.a und den Präfix lib weglässt.
Und auch hier muss man wieder darauf achten, dass zwischen dem Bindenstrich klein l und
dem Namen kein Leerzeichen steht.
Möchte man nun ergänzend zu den systemweiten Suchpfäden eigene Suchpfade hinzufügen,
so kann man dies mit der Option bindestrich groß l machen, gefolgt von dem Pfad.
Und auch hier gilt wieder, dass kein Leerzeichen nach dem Bindenstrich groß l stehen darf.
Wichtig ist hierbei, dass die Position der Argumente stimmen muss.
Da sich ein Bindenstrich groß l mit dem Pfad nur auf alle danach gelisteten Bibliotheken
mit bindestrich klein l bezieht.
Das Linken bzw. Binden der Objektdateien läuft dann ab wie vorher beschrieben.
Dabei sucht der Linke alle Objektdateien aus der Bibliothek heraus, die noch Symbole enthalten,
die bis dahin gefehlt haben.
Diese Objektdateien werden direkt dem Binärabbild, das der Binder erstellt, hinzugefügt.
Der Rest der Objektdateien innerhalb des Archivs wird nicht mitverwendet.
Hier ist die Reihenfolge wichtig, wie die Argumente wieder an den Linke übergeben werden.
Da die Module und Bibliotheken in der Reihenfolge betrachtet werden, in der sie übergeben werden.
Dementsprechend sollte man zunächst alle Module angeben, die man selbst geschrieben hat,
und erst am Ende die Bibliotheken hinzufügen.
Da sonst versehentlich Symbole aus Bibliotheken mitverwendet werden,
obwohl diese vielleicht in einem eigenen Modul definiert sind.
Das Ergebnis des Linkens ist ein fertiges, ist ein ausführbares Programm.
Dieses kann nun eigenständig ausgeführt werden und die Bibliothek, die verwendet wurde,
Zugänglich über
Offener Zugang
Dauer
00:03:20 Min
Aufnahmedatum
2020-12-14
Hochgeladen am
2020-12-14 09:30:03
Sprache
de-DE