Bibliothek (Programmierung)
Eine Bibliothek oder Bücherei (englisch: library) oder Programmbibliothek bezeichnet in der Programmierung eine Sammlung von Programmfunktionalitäten für zusammengehörende Aufgaben.Bibliotheken sind im Unterschied zu Programmen keine eigenständigen Einheiten sondern Hilfsmodule, die Programmen zur Verfügung stehen.
Table of contents |
2 Statische Bibliotheken 3 Dynamische Bibliotheken 4 Bibliotheken unter z/OS |
Quelltextbibliotheken enthalten Sammlungen von Wertedefinitionen, Deklarationen, Funktionen, Klassen, generischen Bestandteilen, usw. (siehe auch: API, C-Standardbibliothek,C++-Standardbibliothek)
Statische Bibliotheken werden nach dem Kompilieren durch einen sogenannten Linker oder Binder in einem eigenen Schritt mit dem ausführbaren Programm verbunden.
Der Linker (Binder) sucht aus den Bibliotheksdateien Unterprogramme heraus, für die es im Programm keine Implementierung gibt. Diese werden dann aus den Dateien extrahiert und an das Programm gebunden, d.h. der Unterprogrammcode wird an den Programmcode angefügt und die Aufrufverweise werden auf die Unterprogrammadressen gerichtet.
Dynamische Bibliotheken werden erst bei Bedarf in den Arbeitsspeicher geladen und durch einen sogenannten Lader mit dem ausführbaren Programm verbunden. Dadurch muss eine Bibliothek, die von mehreren Programmen genutzt wird, nur einmal im Speicher gehalten werden.
Dies ist beispielsweise bei Multitasking-Systemen vorteilhaft, wenn die Bibliotheken insgesamt sehr groß sind und von vielen Prozessen gleichzeitig verwendet werden. Dort wird eine Bibliotheksdatei bei ihrer ersten Verwendung in den Speicher geladen. Trifft ein Programm auf den Verweis zu einem Unterprogramm, das noch nicht eingebunden wurde, dann wird ein Laufzeitbinder aktiviert. Dieser sucht das Unterprogramm in den im Speicher vorhandenen Bibliotheken, fügt die Adresse am Aufrufpunkt ein und führt die das Unterprogramm erstmalig aus.
Bei jedem weiteren Aufruf des Unterprogramms ist dann die Adresse vorhanden, so dass das Unterprogramm direkt aufgerufen wird. Die Ausführungszeit, insbesondere die Startzeit eines Programms, ist hier geringfügig erhöht. Dies wird in Kauf genommen, da der Programmcode der Bibliotheksfunktionen von allen Prozessen geteilt wird. Der gesamte Speicherbedarf aller Programme zusammen ist daher in der Regel kleiner als beim statischen Linken.
Bei den Betriebssystemen Windows und OS/2 wird eine Bibliotheksdatei, die dynamisch bindet, als DLL (DLL für Dynamic Link Library) bezeichnet. Auf Unix-artigen Betriebssystemen (Unix, Linux, usw.) ist die Bezeichnung shared library (englisch shared, geteilt) gebräuchlich.
Dynamische Bibliotheken liegen in Form von Dateien vor und haben unter Windows meist die Dateiendung .dll, auf Unix-artigen System hat sich die Endung .so (shared object), eventuell gefolgt von einer Versionsnummer, eingebürgert.
Unter Windows kann man noch zwischen zwei Arten von DLLs unterschieden: Einsprungs-DLLs und ActiveX-DLLs. Einsprungs-DLLs enthalten Funktionen, ActiveX-Dlls enhalten Klassen.
Bei Windows 95, Windows 98 und Windows Me ist problematisch, dass durch unzureichende Schutzmaßnahmen die DLLs nicht kontrolliert werden - jedes Programm darf sie austauschen und kann dem Betriebssystem damit möglicherweise Schaden zufügen. Windows 2000 und Windows XP hingegen verfügen über einen Systemschutz, der auch die DLLs einbezieht.
Bei z/OS werden alle Partitioned Data Sets (PDS) als Bibliotheken bezeichnet. Die einzelnen Elemente dieser Bibliotheken werden allgemein Member oder, wenn es sich um ausführbaren Programmcode handelt, auch Module genannt.
Statische Module müssen in einer Bibliothek liegen, die dem Linkage Editor als SYSLIB bekanntgegeben wird, dynamische Module werden zur Laufzeit entweder aus der STEPLIB oder aus der JOBLIB geladen und wenn sie hier nicht gefunden werden, aus einer Bibliothek in der LINKLIST.
Quelltextbibliotheken
Statische Bibliotheken
Dynamische Bibliotheken
Dynamische Bibliotheken unter Windows
Bibliotheken unter z/OS