Werkzeuge |
ProgrammbibliothekEine Programmbibliothek bezeichnet in der Programmierung eine Sammlung von Programmfunktionen für zusammengehörende Aufgaben. Bibliotheken sind im Unterschied zu Programmen keine eigenständig lauffähigen Einheiten, sondern Hilfsmodule, die Programmen zur Verfügung gestellt werden.
[Bearbeiten] QuelltextbibliothekenQuelltextbibliotheken enthalten Sammlungen von Wertedefinitionen, Deklarationen, Funktionen, Klassen, generischen Bestandteilen, usw. (siehe auch: API, C-Standardbibliothek, C++-Standardbibliothek) [Bearbeiten] Statische BibliothekenStatische Bibliotheken werden nach dem Kompiliervorgang durch einen so genannten Linker mit dem Kompilat verbunden. Anschließend setzt der Linker daraus ein ausführbares Programm oder auch eine andere ausführbare Komponente zusammen. Der Linker sucht aus den zugeordneten Bibliotheksdateien referenzierte Komponenten (Unterprogramme oder Daten) heraus, für die es im Programm keine Implementierung gibt, und fügt sie dann in das Programm ein. Die so entstehende Datei vergrößert sich entsprechend. [Bearbeiten] Dynamische BibliothekenDynamische Bibliotheken werden erst bei Bedarf in den Arbeitsspeicher geladen und durch den 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 Laufzeitlinker aktiviert. Dieser sucht das Unterprogramm in den im Speicher vorhandenen Bibliotheken, fügt die Adresse am Aufrufpunkt ein und führt 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 Speicherbedarf aller Programme zusammen ist daher in der Regel kleiner als beim statischen Linken. Unterstützt das Betriebssystem virtuellen Speicher, so entfällt das Laden der gesamten Bibliothek bei der ersten Verwendung. Stattdessen wird die Bibliothek in den Speicherbereich jedes sie verwendenden Prozesses eingeblendet. Die virtuelle Speicherverwaltung lädt danach nur tatsächlich benötigte Teile der Bibliothek bei Bedarf von der Festplatte in den Arbeitsspeicher. [Bearbeiten] Bibliotheken in verschiedenen ProgrammiersprachenBibliotheken in Programmiersprachen enthalten Dienste, die nicht im Compiler implementiert sind, sondern in der Sprache selbst programmiert sind und mit dem Compiler zusammen oder völlig von ihm getrennt dem Programmierer zur Verfügung stehen. Im ersten Fall ist die Bibliothek meist in der Sprachbeschreibung festgelegt. Im zweiten Fall spricht man von einer externen Bibliothek. In der Sprachbeschreibung festgelegte Bibliotheken unterscheiden sich teilweise stark im Umfang.
[Bearbeiten] Bibliotheken bei verschiedenen Betriebssystemen[Bearbeiten] WindowsBei den Betriebssystemen Windows (und auch bei OS/2) wird eine Bibliotheksdatei, die dynamisch bindet, als DLL (für Dynamic Link Library) bezeichnet. Entsprechend haben diese Dateien meist die Dateiendung .dll. Ihr Dateiformat ist Portable Executable. Unter Windows kann noch zwischen zwei Arten von DLLs unterschieden werden: Einsprungs-DLLs und ActiveX-DLLs. Einsprungs-DLLs enthalten Funktionen, ActiveX-DLLs enthalten Klassen. Problematisch ist bei Windows 95, Windows 98 und Windows Me, 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. [Bearbeiten] Vorteile
[Bearbeiten] NachteileÄnderungen in DLLs ziehen oft auch Änderungen im Programm nach sich. Dadurch kommt es leicht zu Versionskonflikten, die oft nur sehr schwer aufzuspüren sind. Eine der Grundideen der DLLs war, Programmcode zwischen mehreren Programmen zu teilen, um so Speicher zu sparen. In der Praxis ist es jedoch dazu gekommen, dass viele Programme bei der Installation DLLs in das Windows-Systemverzeichnis schreiben, die außer diesem speziellen Programm kein anderes benutzen kann. Außerdem ist die Entwicklung und insbesondere die Anbindung im Vergleich aufwändiger als zur statischen Bibliothek. [Bearbeiten] Unix-artigeAuf Unix-artigen Betriebssystemen (Unix, Linux, usw.) ist für dynamische Bibliotheken die Bezeichnung shared library (englisch shared, geteilt) gebräuchlich. Oftmals wird dafür das ELF Format eingesetzt, da es sehr flexibel und effizient arbeitet. Für diese Dateien hat sich die Endung .so (shared object) eingebürgert. In der Regel folgt dem Bibliotheksnamen noch eine Versionsnummer, und es existiert eine symbolische Verknüpfung mit dem Bibliotheksnamen ohne Versionsnummer, der auf die eigentliche Bibliothek verweist. Die Bereitstellung dieser Bibliotheken wird durch einen Paketmanager automatisch verwaltet und bei Bedarf zusätzlich installiert und auch wieder freigegeben wenn kein Paket mehr darauf verweist. Hingegen kommerziell und optional zusätzlich installierte Programme werden z. B. in /opt installiert und liefern dort in Unterverzeichnissen ihre eigenen Bibliotheken mit. Objekte und Komponentenorienterte Ansätze können hier realisiert werden, indem in einer Funktion das entsprechende Objekt oder die Komponente instanziert und zurückgegeben werden. [Bearbeiten] Vorteile
[Bearbeiten] Nachteile
[Bearbeiten] Bibliotheken unter z/OSBei 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. [Bearbeiten] Bibliotheken unter Amiga OSBeim AmigaOS werden alle Bibliotheken als shared Library verwendet. Sie werden also zur Laufzeit vom Programm beim System angefordert, das dann die Basisadresse der Bibliothek im Speicher (bis OS3.9) oder die entsprechende Schnittstelle (ab OS4.0) zur Verfügung stellt. Das Programm verwendet dann relative Adressen, um über eine Sprungtabelle vor der Basisadresse an die eigentlichen Funktionen (hinter der Basisadresse) zu kommen. Diese Funktionen sind eintrittsinvariant (reentrant). Selbst bei Änderungen der Bibliothek sind die bestehenden Einträge der Sprungtabellen immer gleich. Es kommen ggf. lediglich neue Einträge hinzu am Ende der Tabellen. Somit ist eine Abwärtskompatibilität gegeben. Als Besonderheit kann bei AmigaOS beim Öffnen einer Library eine Mindest-Versionsnummer angegeben und so sichergestellt werden, dass eine gewünschte Funktionalität auch wirklich verfügbar ist. Wird diese Version nicht vorgefunden, kann das aufrufende Programm sicher auf eine einfachere Funktionalität, wie sie in der älteren Library-Version bereitgestellt wird, zurückschalten. Bibliotheksdateien tragen die Endung .library und befinden sich meist im Verzeichnis LIBS: der Systempartition. Das Betriebssystem überprüft bei der Suche nach einer Bibliothek auch das Programmverzeichnis des anfragenden Programms. [Bearbeiten] Beispiele
[Bearbeiten] Siehe auch |