Bibliothek (Computerwissenschaft)

In der Informatik ist eine Bibliothek eine Sammlung von Mitteln, die verwendet sind, um Software zu entwickeln. Diese können vorschriftlichen Code und Unterprogramme, Klassen, Werte oder Typ-Spezifizierungen einschließen.

Bibliotheken enthalten Code und Daten, die Dienstleistungen unabhängigen Programmen zur Verfügung stellen. Das fördert das Teilen und Ändern des Codes und der Daten auf eine Modulmode, und erleichtert den Vertrieb des Codes und der Daten. Einige executables sind sowohl eigenständige Programme als auch Bibliotheken, aber die meisten Bibliotheken sind nicht rechtskräftig. Executables und Bibliotheken spielen bekannt als Verbindungen zu einander durch den Prozess an, der als Verbindung bekannt ist, die normalerweise durch einen linker getan wird.

Die meisten kompilierten Sprachen haben eine Standardbibliothek, obwohl Programmierer auch ihre eigenen kundenspezifischen Bibliotheken schaffen können. Die meisten modernen Softwaresysteme stellen Bibliotheken zur Verfügung, die die Mehrheit von Systemdienstleistungen durchführen. Solche Bibliotheken haben commoditized die Dienstleistungen, die eine moderne Anwendung verlangt. Als solcher wird der grösste Teil des durch moderne Anwendungen verwendeten Codes in diesen Systembibliotheken zur Verfügung gestellt.

Bibliotheken enthalten häufig einen Sprung-Tisch aller Methoden innerhalb seiner, bekannt als Zugang-Punkte. Anrufe in die Bibliothek verwenden diesen Tisch, die Position des Codes im Gedächtnis nachschlagend, dann es nennend. Das führt oben im Benennen in die Bibliothek ein, aber die Verzögerung ist so klein, um unwesentlich zu sein.

Geschichte

Die frühsten Bibliotheken analogen Programmierkonzepte waren beabsichtigt, um Datendefinitionen von der Programm-Durchführung zu trennen. FREUNDLICH hat den "COMPOOL" (Nachrichtenlache) Konzept zur populären Aufmerksamkeit 1959 gebracht, obwohl es die Idee von der WEISER-Software des großen Systems angenommen hat. Im Anschluss an die Informatik-Grundsätze der Trennung von Sorgen und Informationsverheimlichung, "war der Zweck der Comm Lache, das Teilen von Systemdaten unter vielen Programmen durch die Versorgung einer zentralisierten Datenbeschreibung zu erlauben."

COBOL hat auch "primitive Fähigkeiten für ein Bibliothekssystem" 1959 eingeschlossen, aber Jean Sammet hat sie als "unzulängliche Bibliotheksmöglichkeiten" im Rückblick beschrieben.

Ein anderer Hauptmitwirkender zum modernen Bibliothekskonzept ist in der Form der Unterprogramm-Neuerung von FORTRAN gekommen. FORTRAN Unterprogramme können unabhängig von einander kompiliert werden, aber der Bearbeiter hat an einem linker Mangel. So vor der Einführung von Modulen in Fortran-90 war die Datentypprüfung zwischen Unterprogrammen unmöglich.

Schließlich sollten sich Historiker des Konzepts an einflussreichen Simula 67 erinnern. Simula war die erste objektorientierte Programmiersprache, und seine Klassen sind fast zum modernen Konzept, wie verwendet, in Java, C ++, und C# identisch. Das Klassenkonzept von Simula war auch ein Ahn des Pakets in Ada und dem Modul von Modula-2. Selbst wenn entwickelt ursprünglich 1965 Klassen von Simula in Bibliotheksdateien eingeschlossen und während der Übersetzung hinzugefügt werden konnten.

Verbindung

Bibliotheken sind in der Programm-Verbindung oder Schwergängigkeit des Prozesses wichtig, der Verweisungen auflöst, die als Verbindungen oder Symbole zu Bibliotheksmodulen bekannt sind. Der sich verbindende Prozess wird gewöhnlich durch einen linker oder Binder-Programm automatisch getan, das eine Reihe von Bibliotheken und andere Module in einer gegebenen Ordnung sucht. Gewöhnlich wird es als kein Fehler betrachtet, wenn ein Verbindungsziel mehrmals in einem gegebenen Satz von Bibliotheken gefunden werden kann. Verbindung kann getan werden, wenn eine rechtskräftige Datei geschaffen wird, oder wann auch immer das Programm in der Durchlaufzeit verwendet wird.

Die Verweisungen, die auflösen werden, können Adressen für Sprünge und andere alltägliche Anrufe sein. Sie können im Hauptprogramm, oder in einem Modul abhängig von einem anderen sein. Sie werden in feste oder relokatierbare Adressen (von einer allgemeinen Basis) durch das Zuteilen des Laufzeitgedächtnisses für die Speichersegmente jedes Verweise angebrachten Moduls aufgelöst.

Einige Programmiersprachen können genannte kluge Verbindung einer Eigenschaft verwenden, worin der linker dessen bewusst oder mit dem Bearbeiter integriert, solch ist, dass der linker weiß, wie externe Verweise, und Code in einer Bibliothek verwendet werden, die nie wirklich verwendet wird, wenn auch innerlich Verweise angebracht, aus der kompilierten Anwendung verworfen werden kann. Zum Beispiel kann ein Programm, das nur ganze Zahlen für die Arithmetik verwendet, oder keine arithmetischen Operationen überhaupt tut, Schwimmpunkt-Bibliotheksroutinen ausschließen. Diese sich klug verbindende Eigenschaft kann zu kleineren Anwendungsdateigrößen und reduziertem Speichergebrauch führen.

Wiederposition

Einige Verweisungen in einem Programm oder Bibliotheksmodul werden in einer relativen oder symbolischen Form versorgt, die nicht aufgelöst werden kann, bis der ganze Code und Bibliotheken statische Endadressen zugeteilt werden. Wiederposition ist der Prozess, diese Verweisungen anzupassen, und wird entweder durch den linker oder durch den Lader getan. Im Allgemeinen kann Wiederposition nicht zu individuellen Bibliotheken selbst getan werden, weil sich die Adressen im Gedächtnis ändern können, abhängig vom Programm mit ihnen und anderen Bibliotheken werden sie damit verbunden. Mit der Position unabhängiger Code vermeidet Verweisungen auf absolute Adressen und verlangt deshalb Wiederposition nicht.

Statische Bibliotheken

Wenn Verbindung während der Entwicklung eines rechtskräftigen oder einer anderen Gegenstand-Datei durchgeführt wird, ist es als statische Verbindung oder früh Schwergängigkeit bekannt. In diesem Fall wird die Verbindung gewöhnlich durch einen linker getan, aber kann auch durch den Bearbeiter getan werden. Eine statische Bibliothek, auch bekannt als ein Archiv, sind diejenige, die beabsichtigt ist, um statisch verbunden zu werden. Ursprünglich haben nur statische Bibliotheken bestanden. Statische Verbindung muss durchgeführt werden, wenn irgendwelche Module wiederkompiliert werden.

Alle durch ein Programm erforderlichen Module werden manchmal statisch verbunden und in die rechtskräftige Datei kopiert. Dieser Prozess und die resultierende eigenständige Datei, sind bekannt, weil ein statischer des Programms baut. Ein statischer baut kann weitere Wiederposition nicht brauchen, wenn virtuelles Gedächtnis verwendet wird und kein Adressraum-Lay-Out randomization gewünscht wird.

Geteilte Bibliotheken

Eine geteilte Bibliothek oder geteilter Gegenstand sind eine Datei, die beabsichtigt ist, um durch rechtskräftige Dateien geteilt zu werden, und weiter Gegenstand-Dateien geteilt hat. Durch ein Programm verwendete Module werden von geteilten Gegenständen der Person ins Gedächtnis in der Ladezeit oder Durchlaufzeit geladen, anstatt durch einen linker kopiert zu werden, wenn es eine einzelne monolithische rechtskräftige Datei für das Programm schafft.

Geteilte Bibliotheken können statisch verbunden werden, meinend, dass Verweisungen auf die Bibliotheksmodule aufgelöst werden und die Module zugeteiltes Gedächtnis sind, wenn die rechtskräftige Datei geschaffen wird. Aber häufig die Verbindung von geteilten Bibliotheken wird verschoben, bis sie geladen werden.

Die meisten modernen Betriebssysteme können Bibliotheksdateien desselben Formats wie die rechtskräftigen Dateien geteilt haben. Das bietet zwei Hauptvorteile an: Erstens verlangt es das Bilden nur eines Laders für sie beide, aber nicht zwei (den einzelnen Lader zu haben, wird gut wert seiner zusätzlichen Kompliziertheit betrachtet). Zweitens erlaubt es dem executables, auch als geteilte Bibliotheken verwendet zu werden, wenn sie einen Symbol-Tisch haben. Typische vereinigte rechtskräftige und geteilte Bibliotheksformate sind ELF und Betont männlich (beide in Unix) und PE (Windows). In Windows wurde das Konzept ein Schritt weiter mit sogar Systemmitteln wie Schriftarten gemacht, die im PE-Format stopfen werden. Dasselbe ist unter OpenStep wahr, wo das universale "Bündel"-Format für fast alle Systemmittel verwendet wird.

Das Speicherteilen

Bibliothekscode kann im Gedächtnis durch vielfache Prozesse sowie auf der Platte geteilt werden. Wenn virtuelles Gedächtnis verwendet wird, führen Prozesse dieselbe physische Seite des RAM durch, der in die verschiedenen Adressräume jedes Prozesses kartografisch dargestellt ist. Das ist im Vorteil. Zum Beispiel auf dem System von OpenStep waren Anwendungen häufig nur einige hundert Kilobytes in der Größe und haben schnell geladen; die Mehrheit ihres Codes wurde in Bibliotheken gelegen, die bereits zu anderen Zwecken durch das Betriebssystem geladen worden waren. Es gibt Kosten jedoch; geteilter Code muss spezifisch geschrieben werden, um in einer stark mehrbeanspruchenden Umgebung zu laufen. In einigen älteren Umgebungen wie 16-Bit-Windows oder MPE für den HP 3000, schobern Sie nur gestützte (lokale) Daten auf wurde erlaubt, oder andere bedeutende Beschränkungen wurden auf dem Schreiben einer geteilten Bibliothek gelegt.

Programme können RAM vollbringen, der sich durch das Verwenden der Position unabhängiger Code als in Unix teilt, der zu einer komplizierten, aber flexiblen Architektur, oder durch das Verwenden allgemeiner virtueller Adressen als in Windows und OS/2 führt. Diese Systeme überzeugen sich durch verschiedene Tricks wie, den Adressraum und das Aufbewahren von Ablagefächern für jede geteilte Bibliothek kartografisch vordarzustellen, dieser Code hat eine große Wahrscheinlichkeit davon, geteilt zu werden. Eine dritte Alternative ist einstufiger Laden, wie verwendet, durch IBM System/38 und seine Nachfolger. Das erlaubt von der Position abhängigen Code, aber legt keine bedeutenden Beschränkungen dessen, wohin Code gelegt werden kann, oder wie es geteilt werden kann.

In einigen Fällen können verschiedene Versionen von geteilten Bibliotheken Probleme besonders verursachen, wenn Bibliotheken von verschiedenen Versionen denselben Dateinamen und verschiedene auf einem System installierte Anwendungen haben, verlangt jeder eine spezifische Version. Solch ein Drehbuch ist als DLL Hölle, genannt nach Windows und OS/2 DLL Datei bekannt. Die meisten modernen Betriebssysteme nach 2001, haben Sie Reinigungsmethoden, solche Situationen oder Gebrauch-Anwendung spezifische "private" Bibliotheken zu beseitigen.

Dynamische Verbindung

Dynamische Verbindung oder späte Schwergängigkeit beziehen sich auf die durchgeführte Verbindung, während ein Programm (Ladezeit) oder durchgeführt (Durchlaufzeit) geladen wird, aber nicht wenn die rechtskräftige Datei geschaffen wird. Eine dynamisch verbundene Bibliothek (Bibliothek der dynamischen Verbindung oder DLL unter Windows und OS/2; dynamischer geteilter Gegenstand oder DSO unter Unix ähnlichen Systemen) ist eine für die dynamische Verbindung beabsichtigte Bibliothek. Nur ein minimale Betrag der Arbeit wird durch den linker getan, wenn die rechtskräftige Datei geschaffen wird; es registriert nur was Bibliotheksroutinen die Programm-Bedürfnisse und die Index-Namen oder Zahlen der Routinen in der Bibliothek. Die Mehrheit der Arbeit der Verbindung wird zurzeit getan die Anwendung wird (Ladezeit) oder während der Ausführung (Durchlaufzeit) geladen. Das notwendige sich verbindende Programm, genannt einen dynamischen linker oder Verbindung des Laders, ist wirklich ein Teil des zu Grunde liegenden Betriebssystems.

Programmierer haben ursprünglich dynamische Verbindung in Multics Betriebssystem entwickelt, 1964, und der MTS (Michiganer Endsystem), gebaut gegen Ende der 1960er Jahre anfangend.

Optimierungen

Da sich geteilte Bibliotheken auf den meisten Systemen häufig nicht ändern, können Systeme eine wahrscheinliche Lastadresse für jede geteilte Bibliothek auf dem System schätzen, bevor es erforderlich ist, und versorgen Sie diese Information in den Bibliotheken und executables. Wenn jede geteilte Bibliothek, die geladen wird, diesen Prozess erlebt hat, dann wird jeder an seiner vorher bestimmten Adresse laden, die den Prozess der dynamischen Verbindung beschleunigt. Diese Optimierung ist als Vorschwergängigkeit in Mac OS X und Vorverbindung in Linux bekannt. Nachteile dieser Technik schließen die Zeit ein, die erforderlich ist, diese Adressen jedes Mal die geteilte Bibliotheksänderung, die Unfähigkeit vorzuschätzen, Adressraum-Lay-Out randomization und die Voraussetzung des genügend virtuellen Adressraums für den Gebrauch zu verwenden (ein Problem, das durch die Adoption von 64-Bit-Architekturen, mindestens vorläufig erleichtert wird).

Das Auffinden von Bibliotheken in der Durchlaufzeit

Lader für geteilte Bibliotheken ändern sich weit in der Funktionalität. Einige hängen von den rechtskräftigen versorgenden ausführlichen Pfaden zu den Bibliotheken ab. Jede Änderung zum Bibliotheksnamengeben oder Lay-Out des Dateisystems wird diese Systeme veranlassen zu scheitern. Allgemeiner wird nur der Name der Bibliothek (und nicht der Pfad) im rechtskräftigen mit dem Betriebssystem versorgt, das eine Methode liefert, die Bibliothek auf der Platte gestützt auf einem Algorithmus zu finden.

Wenn eine geteilte Bibliothek, von der ein rechtskräftiger abhängt, gelöscht, bewegt oder umbenannt wird, oder wenn eine unvereinbare Version der Bibliothek zu einem Platz kopiert wird, der früher in der Suche ist, würde das rechtskräftige scheitern zu laden. Das wird auf vielen Plattformen vorhandene Abhängigkeitshölle genannt. Die (berüchtigte) Windows-Variante ist als DLL Hölle allgemein bekannt.

AmigaOS

AmigaOS versorgt allgemeine Systembibliotheken in einem durch das BEFREIEN definierten Verzeichnis: Pfad-Anweisung. Anwendungsspezifische Bibliotheken können in dasselbe Verzeichnis wie die rechtskräftige Anwendung hineingehen. AmigaOS wird diese Positionen wenn rechtskräftige Versuche suchen, eine geteilte Bibliothek zu starten. Eine Anwendung kann auch einen ausführlichen Pfad liefern, wenn sie versucht, eine Bibliothek zu starten.

Windows von Microsoft

Windows von Microsoft wird die Registrierung überprüfen, um den richtigen Platz zu bestimmen, ActiveX DLL zu finden, aber für anderen DLLs wird es die Verzeichnisse in der definierten Ordnung überprüfen. Erstens überprüft Windows das Verzeichnis, wo es das Programm (privater DLL) geladen hat; dann das aktuelle Arbeitsverzeichnis; irgendwelche gesetzten Verzeichnisse durch das Benennen der Funktion; der System32, das System und die Windows-Verzeichnisse; und schließlich haben die Verzeichnisse durch die PFAD-Umgebungsvariable angegeben. Anwendungen, die für das.NET Fachwerk-Fachwerk (seit 2002) geschrieben sind, überprüfen Sie auch das Globale Geheime Zusammenbau-Lager als der primäre Laden von geteilten dll Dateien, um das Problem der DLL Hölle zu entfernen.

OpenStep

OpenStep hat ein flexibleres System verwendet, eine Liste von Bibliotheken von mehreren bekannten Positionen sammelnd (ähnlich dem PFAD-Konzept), wenn das System zuerst anfängt. Bewegende Bibliotheken um Ursachen keine Probleme überhaupt, obwohl Benutzer Zeitkosten übernehmen, wenn sie zuerst das System anfangen.

Unix ähnliche Systeme

Die meisten Unix ähnlichen Systeme haben einen "Suchweg", der Dateisystemverzeichnisse angibt, in denen man nach dynamischen Bibliotheken sucht. Einige Systeme geben den Verzug-Pfad in einer Konfigurationsdatei an; andere harter Code es in den dynamischen Lader. Einige rechtskräftige Dateiformate können zusätzliche Verzeichnisse angeben, in denen man nach Bibliotheken nach einem besonderen Programm sucht. Das kann gewöhnlich mit einer Umgebungsvariable überritten werden, obwohl es für setuid und setgid Programme arbeitsunfähig ist, so dass ein Benutzer solch ein Programm nicht zwingen kann, willkürlichen Code mit der Wurzelerlaubnis zu führen. Entwickler von Bibliotheken werden dazu ermuntert, ihre dynamischen Bibliotheken in Plätze im Verzug-Suchweg zu legen. Auf der Kehrseite kann das Installation von neuen Bibliotheken problematisch machen, und diese "bekannten" Positionen werden schnell nach Hause für eine steigende Zahl von Bibliotheksdateien, Management komplizierter machend.

Das dynamische Laden

Das dynamische Laden, eine Teilmenge der dynamischen Verbindung, ist mit einem dynamisch verbundenen Bibliotheksladen und Entleerung in der Durchlaufzeit auf Anfrage verbunden. Solch eine Bitte kann implizit während der Übersetzung oder ausführlich in der Durchlaufzeit gemacht werden. Implizite Bitten werden während der Übersetzung gemacht, wenn ein linker Bibliotheksverweisungen hinzufügt, die Dateipfade oder einfach Dateinamen einschließen. Ausführliche Bitten werden gemacht, wenn Anwendungen direkte Anrufe zu einer API eines Betriebssystems in der Durchlaufzeit machen.

Am meisten Betriebssysteme, die dynamisch verbundene Bibliotheken auch unterstützen, unterstützen dynamisch das Laden solcher Bibliotheken über eine Durchlaufzeit linker API. Zum Beispiel verwendet Windows von Microsoft die API-Funktionen, und mit Microsoft Dynamic Link Libraries; POSIX hat Systeme, einschließlich des grössten Teiles von UNIX und UNIX ähnlicher Systeme gestützt, verwenden Sie, und. Einige Entwicklungssysteme automatisieren diesen Prozess.

Gegenstand und Klassenbibliotheken

Obwohl ursprünglich den Weg gebahnt, in den 1960er Jahren hat dynamische Verbindung Betriebssysteme nicht erreicht, die von Verbrauchern bis zum Ende der 1980er Jahre verwendet sind. Es war in einer Form in am meisten Betriebssystemen bis zum Anfang der 1990er Jahre allgemein verfügbar. Während dieser derselben Periode wurde objektorientierte Programmierung (OOP) ein bedeutender Teil der Programmierlandschaft. OOP mit der Laufzeitschwergängigkeit verlangt Zusatzinformation, die traditionelle Bibliotheken nicht liefern. Zusätzlich zu den Namen und Zugang-Punkten des Codes, der innerhalb gelegen ist, verlangen sie auch eine Liste der Gegenstände, von denen sie abhängen. Das ist eine Nebenwirkung von einem der Hauptvorteile von OOP, Erbes, was bedeutet, dass Teile der ganzen Definition jeder Methode in verschiedenen Plätzen sein können. Das hat mehr als einfach Schlagseite diese eine Bibliothek verlangt die Dienstleistungen von einem anderen: In einem wahren OOP System dürfen die Bibliotheken selbst nicht während der Übersetzung bekannt sein, und sich vom System bis System ändern.

Zur gleichen Zeit haben viele Entwickler an der Idee von Mehrreihe-Programmen gearbeitet, in denen eine "Anzeige", die auf einem Tischcomputer läuft, die Dienstleistungen eines Großrechners oder Minicomputers für die Datenlagerung oder Verarbeitung verwenden würde. Zum Beispiel würde ein Programm auf einem GUI-basierten Computer Nachrichten an einen Minicomputer senden, um kleine Proben eines riesigen dataset für die Anzeige zurückzugeben. Entfernte Verfahren-Anrufe haben bereits diese Aufgaben behandelt, aber es gab RPC kein Standardsystem.

Bald hat die Mehrheit des Minicomputers und der Großrechner-Verkäufer Projekte angestiftet, die zwei zu verbinden, ein OOP Bibliotheksformat erzeugend, das überall verwendet werden konnte. Solche Systeme waren als Gegenstand-Bibliotheken bekannt, oder haben Gegenstände verteilt, wenn sie entfernten Zugang unterstützt haben (nicht, haben alle getan). Der COM des Microsofts ist ein Beispiel solch eines Systems für den lokalen Gebrauch, DCOM eine modifizierte Version, die entfernten Zugang unterstützt.

Für einige Zeit haben Gegenstand-Bibliotheken den Status des "folgenden großen Dings" in der Programmierwelt gehalten. Es gab mehrere Anstrengungen, Systeme zu schaffen, die auf Plattformen stoßen würden, und sich Gesellschaften beworben haben, um zu versuchen, Entwickler in ihr eigenes System schließen zu lassen. Beispiele schließen das Systemgegenstand-Modell von IBM (SOM/DSOM), Sonne-Mikrosysteme Distributed Objects Everywhere (DOE), Portable Distributed Objects (PDO) von NeXT, ObjectBroker von Digital, das Teilgegenstand-Modell des Microsofts (COM/DCOM) und jede Zahl von CORBA-basierten Systemen ein.

Nach dem unvermeidlichen Abkühlen des Markttricks setzen Gegenstand-Bibliotheken fort, sowohl in der objektorientierten Programmierung als auch in den verteilten Informationssystemen verwendet zu werden. Klassenbibliotheken sind die raue OOP Entsprechung von älteren Typen von Codebibliotheken. Sie enthalten Klassen, die Eigenschaften beschreiben und Handlungen (Methoden) definieren, die Gegenstände einschließen. Klassenbibliotheken werden verwendet, um zu schaffen, oder protestiert mit ihrem Eigenschaft-Satz gegen spezifische Werte. Auf einigen OOP Sprachen, wie Java, ist die Unterscheidung mit den Klassen klar, die häufig in Bibliotheksdateien (wie Javas GLAS-Dateiformat) und die realisierten Gegenstände enthalten sind, die nur im Gedächtnis (obwohl potenziell fähig, wohnen, um gemacht zu werden, beharrlich in getrennten Dateien). In anderen, wie Plausch, sind die Klassenbibliotheken bloß der Startpunkt für ein Systemimage, das den kompletten Staat der Umgebung, Klassen und aller realisierten Gegenstände einschließt.

Entfernte Bibliotheken

Eine andere Lösung des Bibliotheksproblems kommt daraus, völlig getrennten executables (häufig in einer Leichtgewichtsform) zu verwenden und sie zu nennen, einen entfernten Verfahren-Anruf (RPC) über ein Netz zu einem anderen Computer verwendend. Diese Annäherung maximiert Betriebssystemwiedergebrauch: Der Code musste die Bibliothek unterstützen ist derselbe Code, der wird pflegt, Anwendungsunterstützung und Sicherheit für jedes andere Programm zur Verfügung zu stellen. Zusätzlich verlangen solche Systeme nicht, dass die Bibliothek auf derselben Maschine besteht, aber können die Bitten über das Netz nachschicken.

Jedoch bedeutet solch eine Annäherung, dass jeder Bibliotheksanruf einen beträchtlichen Betrag oben verlangt. RPC Anrufe sind viel teurer als das Benennen einer geteilten Bibliothek, die bereits auf derselben Maschine geladen worden ist. Diese Annäherung wird in einer verteilten Architektur allgemein verwendet, die schweren Gebrauch solcher entfernten Anrufe, namentlich Client/Server-Systeme und Anwendungsserver wie Unternehmen JavaBeans macht.

Codegenerationsbibliotheken

Codegenerationsbibliotheken sind APIs auf höchster Ebene, der erzeugen oder Byte-Code für Java umgestalten kann. Sie werden durch die Aspekt-orientierte Programmierung, ein Datenzugriffsfachwerk verwendet, und um zu prüfen, um dynamische Proxygegenstände zu erzeugen. Sie werden auch verwendet, um Feldzugang abzufangen.

Das Dateinamengeben

  • AmigaOS

:The-System identifiziert Bibliotheken mit einer ".library" Nachsilbe (zum Beispiel:). Das sind getrennte Dateien (geteilte Bibliotheken), die durch das Programm angerufen werden, das läuft, und dynamisch geladen ist, aber nicht dynamisch verbunden wird. Sobald die Bibliothek gewöhnlich angerufen worden ist, hat sie nicht deallocate Gedächtnis und Mittel gekonnt, um die sie gebeten hat. Benutzer können eine "flushlibs" Auswahl zwingen, indem sie Befehl-Nutzen von AmigaDOS verwenden (der freies Gedächtnis im System überprüft und das Auswahl-Nutzen-Erröten hat, das Gedächtnis von Bibliotheken befreit, die durch Programme offen gelassen sind). Seit AmigaOS 4.0 Juli 2007 sind die Erste Aktualisierung, Unterstützung für geteilte Gegenstände und dynamische Verbindung eingeführt worden. Jetzt können ".so"-Gegenstände auch auf Amiga, zusammen mit ".library Dateien" bestehen.

  • Die meisten modernen Unix ähnlichen Systeme

:The-Systemläden und Dateien in Verzeichnissen solcher als, oder. Die Dateinamen fangen immer mit, und Ende mit (Archiv, statische Bibliothek) oder (geteilter Gegenstand, dynamisch verbundene Bibliothek) an. Einige Systeme könnten vielfache Namen für die dynamisch verbundene Bibliothek mit den meisten Namen haben, die Namen für symbolische Verbindungen zum restlichen Namen sind; jene Namen könnten die Hauptversion der Bibliothek oder die volle Versionsnummer einschließen; zum Beispiel, auf einigen Systemen würde der Dateiname für die zweite Hauptschnittstelle-Revision der dynamisch verbundenen Bibliothek sein. Die in den Bibliotheksverzeichnissen manchmal gefundenen Dateien sind Libtool-Archive, die durch das System als solcher nicht verwendbar sind.

  • Mac OS X

:The-System erbt statische Bibliotheksvereinbarung von BSD mit der Bibliothek, die in einer Datei versorgt ist, und kann artige dynamisch verbundene Bibliotheken (mit der Nachsilbe stattdessen) verwenden. Die meisten Bibliotheken in Mac OS X bestehen jedoch aus "dem Fachwerk", das innerhalb von speziellen Verzeichnissen gelegt ist, genannt "Bündel", die die erforderlichen Dateien und metadata der Bibliothek wickeln. Zum Beispiel würde ein genanntes Fachwerk in einem Bündel genannt durchgeführt, damit entweder die dynamisch verbundene Bibliotheksdatei zu sein oder ein symlink zur dynamisch verbundenen Bibliotheksdatei darin zu sein.

:Dynamically linkable Bibliotheken haben gewöhnlich die Nachsilbe, obwohl andere Dateiname-Erweiterungen zum spezifischen Zweck dynamisch verbundene Bibliotheken z.B zu OLE Bibliotheken verwendet werden können. Die Schnittstelle-Revisionen werden entweder in den Dateinamen verschlüsselt, oder weg mit COM-Gegenstand-Schnittstellen abstrahiert. Je nachdem, wie sie kompiliert werden, können Dateien entweder statische Bibliotheken oder Darstellungen dynamisch linkable Bibliotheken erforderlich nur während der Kompilation sein, die als "Importbibliotheken" bekannt ist. Unterschiedlich in der UNIX Welt, wo verschiedene Dateierweiterungen verwendet werden, wenn man sich gegen die Datei in Windows verbindet, muss man zuerst wissen, ob es eine regelmäßige statische Bibliothek oder eine Importbibliothek ist. Im letzten Fall muss eine Datei in der Durchlaufzeit da sein.

Das Genehmigen

Die GPL-Verbindung der Ausnahme erlaubt Programme, die sich unter GPL nicht lizenzieren, um sich zu Bibliotheken zu verbinden, die unter der Ausnahme lizenziert sind ohne dadurch zu werden, unterworfen GPL Voraussetzungen.

Beispiele

dso

make.sh

  1. !/bin/sh
  2. openbsd 4.9
  3. gcc 4.2.1

exportieren Sie LD_LIBRARY_PATH= $LD_LIBRARY_PATH:.

werfen Sie "hallo Welt zurück!)"> hello.txt;

gcc-c fmgmt.c;

gcc-g - hat libmyio.c-o libmyio.so geteilt;

gcc fmgmt.o-L./-lmyio-o fmgmt;

./fmgmt hello.txt;

rm hello.txt;

</syntaxhighlight>

myio.h

  1. einschließen

/ *

öffnet Strom

@param fpath, omode - Pfad zur Datei, öffnet Datei Weise

@return fp oder UNGÜLTIGER

  • /

DATEI *sopen (Rotforelle *fpath, Rotforelle *omode);

/ *

Kopie-Datei zur Datei, Strom zum Strom

@param fp, Strom

@return 0

/

interne Nummer s2s (DATEI *fp, DATEI *stream);

/ *

bekommen Sie Info von der DATEI struct, Drucke es zu stdout

@param-DATEI *fp

@return 0;

/

interne Nummer _sinf _ (DATEI *fp);

</syntaxhighlight>

libmyio.c

  1. schließen Sie "myio.h" ein

DATEI *sopen (Rotforelle *fpath, Rotforelle *omode)

{\

DATEI *fp;

wenn (fp = fopen (fpath, omode)) {\

geben Sie fp zurück;

}\

sonst {\

kehren Sie UNGÜLTIG zurück;

}\}\

interne Nummer s2s (DATEI *fp, DATEI *stream)

{\

interne Nummer c;

während ((c = fgetc (fp))! = EOF) {\

putc (c, Strom);

}\

kehren Sie 0 zurück;

}\

interne Nummer _sinf _ (DATEI *fp)

{\

printf (" _r: % d\n", fp-> _ r);

printf (" _w: % d\n", fp-> _ w);

printf (" _flags: % x\n", fp-> _ Fahnen);

printf (" _file: % x\n", fp-> _ Datei);

printf (" _lbfsize: % x\n", fp-> _ lbfsize);

printf (" _blksize: % d\n", fp-> _ blksize);

printf (" _offset: % d\n", fp-> _ Ausgleich);

kehren Sie 0 zurück;}\</syntaxhighlight>

fmgmt.c

schließen Sie "myio.h" ein

//Gebrauch: [./fmgmt hello.txt]

int Hauptsache (interne Nummer argc, Rotforelle ** argv, grenzt Rotforelle ** ab)

{\ DATEI *fp;

Rotforelle *mode = "r";

wenn (argv [2]) {\

printf (" %s\n", "Gebrauch: [./fmgmt hello.txt]");

kehren Sie 1 zurück;

}\ sonst {\

wenn (fp = sopen (argv [1], Weise)) {\

//printf (" %s %s\n", argv [1], "hat sich geöffnet!");

s2s (fp, stdout);

//_sinf _ (fp);

fclose (fp);

}\

sonst {\

printf (" %s %s\n", argv [1], "hat gescheitert!");

kehren Sie 2 zurück;

}\ }\}\</syntaxhighlight>

chmod 700 make.sh

./make.sh

Siehe auch

  • Codewiedergebrauch
  • Linker, (rechnend)
  • Lader, (rechnend)
  • Bibliothek der dynamischen Verbindung
  • Gegenstand-Datei
  • Einfügefunktion
  • Vorschwergängigkeit
  • Statische Bibliothek
  • Laufzeitbibliothek
  • Visual Component Library (VCL)
  • Teilbibliothek für die böse Plattform (CLX)
  • Lazarus Component Library (LCL)
  • C Standardbibliothek
  • Javanische Klassenbibliothek
  • Grundklassenbibliothek
  • Allgemeine Programmierung (verwendet durch den C ++ Standardbibliothek)
  • soname

Links


Waverly, Alabama / Gestreift die Superkatze
Impressum & Datenschutz