22 - 4.4 Thread-Koordinierung: Statische Bibliotheken [ID:26432]
50 von 51 angezeigt

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,

Teil einer Videoserie :

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

Einbetten
Wordpress FAU Plugin
iFrame
Teilen