Zum Inhalt springen

Programmbibliothek

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 8. Mai 2004 um 12:09 Uhr durch Poldi (Diskussion | Beiträge). Sie kann sich erheblich von der aktuellen Version unterscheiden.
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Eine Bibliothek oder Bücherei (englisch für 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, es sind Hilfsmodule, die Programmen zur Verfügung stehen.


Quelltextbibliotheken

Quelltextbibliotheken enthalten Sammlungen von Wertedefinitionen, Deklarationen, Funktionen, Klassen, generischen Betandteilen, usw. (siehe auch: API, C-Standardbibliothek)


Statische Bibliotheken

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 Unterprogrammaufrufe heraus, für die es im Programm keine Implementierung gibt und sucht sie in den Bibliotheksdateien. Diese werden dann aus diesen Dateien extrahiert und an das Programm angebunden, d.h. der Routinencode wird an den Programmcode angefügt und die Aufrufadressen werden auf die Routinenadresse gerichtet. Unterprogramme in Bibliotheken können bei Bedarf auch Bibliotheksprogramme, meist sogar aus weiteren Bibliotheksdateien, verwenden.


Dynamische Bibliotheken

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 insgesamt in den Speicher geladen. Trifft ein Programm auf die Adresse einer Routine, die noch nicht eingebunden wurde, wird ein spezieller Laufzeitbinder aktiviert. Dieser sucht die Routine in den im Speicher vorhandenen Bibliotheken, fügt die Adresse an die Aufrufadresse ein und führt die Routine erstmalig aus.

Bei jedem weiteren Aufruf der Routine ist dann die Adresse vorhanden, so dass die Routine direkt aufgerufen wird. Die Ausführungszeit, insbesondere die Startzeit eines Programms, ist hier geringfügig erhöht. Dies wird in Kauf genommen wird, 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 werden Bibliotheksdateien, die dynamisch binden, als DLLs (DLL = dynamic link library) bezeichnet. Auf Unix-artigen Betriebssystemen (Unix, Linux, usw.) ist die Bezeichnung shared library (englisch für 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.


Dynamische Bibliotheken unter Windows

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 dem Betriebssystem damit möglicherweise Schaden zufügen. Windows 2000 und Windows XP hingegen verfügen über einen Systemschutz, der auch die DLLs einbezieht.