Bibliothek (Computer)
Im Informatik, a Bibliothek ist eine Sammlung von nicht flüchtig Ressourcen verwendet von Computerprogramme, oft für Software-Entwicklung. Diese können Konfigurationsdaten, Dokumentation, Hilfedaten, Nachrichtenvorlagen, umfassen, umfassen vorgeschriebener Code und Unterroutinen, Klassen, Werte oder Typ Spezifikationen. Im IBMs OS/360 und seine Nachfolger Sie werden als bezeichnet als Partitionierte Datensätze.[1]
A Bibliothek ist auch eine Sammlung von Implementierungen von Verhalten, die in Bezug auf eine Sprache geschrieben wurde und eine gut definierte Schnittstelle durch die das Verhalten aufgerufen wird. Zum Beispiel können Personen, die ein höheres Programm schreiben möchten Systemaufrufe Anstatt diese Systemaufrufe immer wieder implementieren. Darüber hinaus wird das Verhalten zur Wiederverwendung durch mehrere unabhängige Programme vorgesehen. Ein Programm ruft das Bibliothek über einen Mechanismus der Sprache auf. Zum Beispiel in einem einfachen Imperative Sprache Das Verhalten in einer Bibliothek wird wie C unter Verwendung der normalen Funktionsberechtigung von C aufgerufen. Was den Anruf als Bibliotheksfunktion unterscheidet, im Vergleich zu einer anderen Funktion im selben Programm, ist die Art und Weise, wie der Code im System organisiert ist.[2]
Der Bibliothekscode wird so organisiert, dass er von mehreren Programmen verwendet werden kann, die keine Verbindung zueinander haben, während Code, der Teil eines Programms ist, so organisiert ist, dass sie nur innerhalb dieses einen Programms verwendet werden. Diese Unterscheidung kann einen hierarchischen Begriff erlangen, wenn ein Programm groß wird, wie beispielsweise ein Multi-Millionen-Programm. In diesem Fall können interne Bibliotheken von unabhängigen Untertiefern des großen Programms wiederverwendet werden. Das Unterscheidungsmerkmal ist, dass eine Bibliothek für die Wiederverwendung von unabhängigen Programmen oder Unterprogrammen organisiert wird und der Benutzer nur die Schnittstelle und nicht die internen Details der Bibliothek kennen muss.
Der Wert einer Bibliothek liegt in der Wiederverwendung standardisierter Programmelemente. Wenn ein Programm eine Bibliothek aufruft, erhält es das in dieser Bibliothek implementierte Verhalten, ohne dieses Verhalten selbst implementieren zu müssen. Bibliotheken fördern die gemeinsame Nutzung von Code in a modular Mode und erleichtert die Verteilung des Codes.
Das von einer Bibliothek implementierte Verhalten kann mit dem aufgerufenen Programm unter verschiedenen verbunden sein Programmlebenszyklusphasen. Wenn der Code der Bibliothek während des Aufbaus des aufgerufenen Programms zugegriffen wird, wird die Bibliothek a genannt Statische Bibliothek.[3] Eine Alternative besteht darin, die ausführbare Datei des aufgerufenen Programms aufzubauen und diese unabhängig von der Bibliotheksimplementierung zu verteilen. Das Bibliotheksverhalten ist angeschlossen, nachdem die ausführbare Datei entweder als Teil des Prozesses der Ausführung oder mitten in der Ausführung aufgenommen wurde. In diesem Fall wird die Bibliothek a genannt Dynamische Bibliothek (geladen bei Laufzeit). Eine dynamische Bibliothek kann bei der Vorbereitung eines Programms für die Ausführung geladen und verknüpft werden Linker. Alternativ kann eine Anwendung in der Mitte der Ausführung ausdrücklich nach einem Modul anfordern geladen.
Die meisten kompilierte Sprachen haben eine Standardbibliothek, obwohl Programmierer auch ihre eigenen benutzerdefinierten Bibliotheken erstellen können. Die meisten modernen Softwaresysteme bieten Bibliotheken, die die Mehrheit der Systemdienste implementieren. Solche Bibliotheken haben die Dienste organisiert, die eine moderne Anwendung benötigt. Daher werden in diesen Systembibliotheken die meisten von modernen Anwendungen verwendeten Code bereitgestellt.
Geschichte
1947 Goldstine und von Neumann spekulierte, dass es nützlich wäre, eine "Bibliothek" von zu erstellen Unterroutinen für ihre Arbeit am IAS -Maschine, ein früher Computer, der zu dieser Zeit noch nicht betriebsbereit war.[4] Sie stellten sich eine physische Bibliothek von vor Magnetdrahtaufnahmenmit jedem Drahtspeichern wiederverwendbarer Computercode.[5]
Inspiriert von von Neumann, Wilkes und sein Team konstruiert Edsac. EIN Aktenschrank von Stempelband hielt die Unterroutine -Bibliothek für diesen Computer.[6] Die Programme für EDSAC bestanden aus einem Hauptprogramm und einer Abfolge von Subroutinen, die aus der Subroutine -Bibliothek kopiert wurden.[7] 1951 veröffentlichte das Team das erste Lehrbuch zum Programmieren, Die Vorbereitung von Programmen für einen elektronischen digitalen Computer, die die Erstellung und den Zweck der Bibliothek detailliert beschrieben haben.[8]
Cobol enthalten "primitive Funktionen für ein Bibliothekssystem" im Jahr 1959,[9] aber Jean Sammet beschrieb sie im Nachhinein als "unzureichende Bibliothekseinrichtungen".[10]
Fröhlich Hatte einen Kommunikationspool (Kompool), ungefähr eine Bibliothek von Header -Dateien.
Ein weiterer wichtiger Beitrag zum modernen Bibliothekskonzept kam in Form des Unterprogramm Innovation von Forran. FORTRAN -Subprogramme können unabhängig voneinander zusammengestellt werden, aber dem Compiler fehlte a Linker. Also vor der Einführung von Modulen in Fortran-90, Geben Sie die Überprüfung ein Zwischen Forran[NB 1] Unterprogramme waren unmöglich.[11]
Mitte der 1960er Jahre waren Kopier- und Makrobibliotheken für Assembler üblich. Beginnend mit der Popularität der IBM System/360, Bibliotheken, die andere Arten von Textelementen enthalten, z. B. Systemparameter, wurden ebenfalls häufig.
Simula war der erste Objekt orientierte Programmierung Sprache und seine Klassen waren nahezu identisch mit dem modernen Konzept, wie es in verwendet wird Java, C ++, und C#. Das Klasse Das Konzept der Simula war auch ein Vorläufer der Paket in Ada und die Modul von Modula-2.[12] Selbst wenn sie 1965 ursprünglich entwickelt wurden, könnten Simula -Kurse in Bibliotheksdateien enthalten und zur Kompilierungszeit hinzugefügt werden.[13]
Verknüpfung
Bibliotheken sind im Programm wichtig Verknüpfung oder Bindung Prozess, der Referenzen auflöst Links oder Symbole zu Bibliotheksmodulen. Der Verknüpfungsprozess wird normalerweise automatisch durch a durchgeführt Linker oder Bindemittel Programm, das in einer bestimmten Reihenfolge eine Reihe von Bibliotheken und anderen Modulen durchsucht. Normalerweise wird es nicht als Fehler angesehen, wenn ein Linkziel in einem bestimmten Satz von Bibliotheken mehrmals gefunden werden kann. Die Verknüpfung kann durchgeführt werden, wenn eine ausführbare Datei erstellt wird oder wann immer das Programm bei verwendet wird Laufzeit.
Die zugelassenen Referenzen können Adressen für Sprünge und andere Routineanrufe sein. Sie können im Hauptprogramm oder in einem Modul abhängig von einem anderen sein. Sie werden in feste oder verlagbare Adressen (von einer gemeinsamen Basis) aufgelöst, indem sie den Laufzeitspeicher für die zuordnen Speichersegmente von jedem verwiesenen Modul.
Einige Programmiersprachen verwenden eine Funktion namens namens Smart Links wobei der Linker den Compiler kennen oder in die Integration integriert ist, so dass der Linker weiß, wie externe Referenzen verwendet werden, und Code in einer Bibliothek, die nie tatsächlich ist GebrauchtObwohl intern referenziert, kann dies aus der kompilierten Anwendung verworfen werden. Beispielsweise kann ein Programm, das nur Ganzzahlen für die Arithmetik verwendet, oder überhaupt keine arithmetischen Operationen ausführt, die Routinen der Gleitkomma-Bibliothek ausschließen. Diese Smart-Link-Funktion kann zu kleineren Anwendungsdateigrößen und einer reduzierten Speicherverwendung führen.
Verlegung
Einige Referenzen in einem Programm- oder Bibliotheksmodul werden in einer relativen oder symbolischen Form gespeichert, die erst dann gelöst werden kann, wenn allen Code und Bibliotheken endgültige statische Adressen zugewiesen werden. Verlegung ist der Prozess der Anpassung dieser Referenzen und wird entweder vom Linker oder der durchgeführt Lader. Im Allgemeinen kann die Umsiedlung nicht in einzelnen Bibliotheken selbst durchgeführt werden, da die Adressen im Speicher je nach Programm und anderen Bibliotheken, mit denen sie kombiniert werden, je nach Programm variieren können. Positionsunabhängiger Code Vermeidet Verweise auf absolute Adressen und erfordert daher keinen Verlagerung.
Statische Bibliotheken
Beim Verknüpfung wird während der Erstellung einer ausführbaren Datei oder einer anderen Objektdatei ausgeführt, sie wird als bekannt als Statische Verknüpfung oder Frühe Bindung. In diesem Fall erfolgt die Verknüpfung normalerweise durch a Linker, kann aber auch von der getan werden Compiler.[14] A Statische Bibliothek, auch bekannt als ein Archiv, ist einer, der statisch verknüpft sein soll. Ursprünglich existierten nur statische Bibliotheken. Eine statische Verknüpfung muss durchgeführt werden, wenn Module neu kompiliert werden.
Alle von einem Programm erforderlichen Module werden manchmal statisch verknüpft und in die ausführbare Datei kopiert. Dieser Prozess und die resultierende eigenständige Datei sind als als bekannt statischer Build des Programms. Ein statischer Build benötigt möglicherweise nicht weiter Verlegung wenn virtueller Speicher wird verwendet und nein Adressraumlayout Randomisierung ist erwünscht.[15]
A gemeinsame Bibliothek oder gemeinsames Objekt ist eine Datei, die von der gemeinsam genutzten Datei vorgesehen ist ausführbare Dateien und weitere gemeinsam genutzte Objektdateien. Module, die von einem Programm verwendet werden, werden von einzelnen gemeinsam genutzten Objekten in den Speicher unter geladen Ladezeit oder Laufzeitanstatt von einem Linker kopiert zu werden, wenn er eine einzelne monolithische ausführbare Datei für das Programm erstellt.
Freigegebene Bibliotheken können während der Kompilierungszeit statisch verknüpft werden, was bedeutet, dass Verweise auf die Bibliotheksmodule behoben und den Modulen Speicher erhalten, wenn die ausführbare Datei erstellt wird. Aber oft wird die Verknüpfung gemeinsamer Bibliotheken verschoben, bis sie geladen sind.[zweifelhaft ]
Am modernsten Betriebssysteme[NB 2] Kann Bibliotheksdateien desselben Formats wie die ausführbaren Dateien gemeinsam genutzt haben. Dies bietet zwei Hauptvorteile: Erstens erfordert es, dass nur einen Lader für beide und nicht zwei erstellt wird (mit dem einzelnen Lader wird die zusätzliche Komplexität wert wert). Zweitens können die ausführbaren Ausführungsfähigkeiten auch als gemeinsam genutzte Bibliotheken verwendet werden, wenn sie a haben Symboltabelle. Typische kombinierte ausführbare und gemeinsam genutzte Bibliotheksformate sind ELF und Macho (beide in Unix) und SPORT (Windows).
In einigen älteren Umgebungen wie z. 16-Bit-Fenster oder MPE für die HP 3000Es wurden nur Stack-basierte Daten (lokal) im Code mit Shared-Library-Code zugelassen, oder andere signifikante Beschränkungen wurden in den Code für gemeinsam genutzte Library eingerichtet.
Speicherfreigabe
Der Bibliothekscode kann im Speicher nach mehreren freigegeben werden Prozesseund auf der Festplatte. Wenn ein virtueller Speicher verwendet wird, würden Prozesse dieselbe physische Seite von RAM ausführen, die in die verschiedenen Adressräume der Prozesse zugeordnet wird. Dies hat Vorteile. Zum Beispiel auf der OpenStep System, Anwendungen waren oft nur wenige hundert Kilobyten an Größe und wurden schnell geladen. Der größte Teil ihres Codes befand sich in Bibliotheken, die bereits vom Betriebssystem für andere Zwecke geladen worden waren.
Programme können RAM -Teilen durch Nutzung erreichen Positionsunabhängiger Code, wie in Unix, was zu einer komplexen, aber flexiblen Architektur oder durch Verwendung gemeinsamer virtueller Adressen wie in Windows und führt OS/2. Diese Systeme stellen sicher, dass der Code auf verschiedene Weise wie das Vorbereiten des Adressraums und das Reservieren von Slots für jede gemeinsame Bibliothek eine hohe Wahrscheinlichkeit hat, dass sie gemeinsam genutzt werden. Eine dritte Alternative ist single-level store, wie von der verwendet IBM System/38 und seine Nachfolger. Dies ermöglicht positionsabhängigen Code, legt jedoch keine wesentlichen Einschränkungen dafür, wo Code platziert werden kann oder wie er gemeinsam genutzt werden kann.
In einigen Fällen können verschiedene Versionen gemeinsamer Bibliotheken Probleme verursachen, insbesondere wenn Bibliotheken verschiedener Versionen denselben Dateinamen haben und verschiedene Anwendungen, die auf einem System installiert sind, jeweils eine bestimmte Version benötigen. Ein solches Szenario ist als bekannt als Dll Hölle, benannt nach Windows und OS/2 DLL -Datei. Die meisten modernen Betriebssysteme nach 2001 verfügen über Reinigungsmethoden, um solche Situationen zu beseitigen oder anwendungsspezifische "private" Bibliotheken zu verwenden.[16]
Dynamische Verknüpfung
Dynamische Verknüpfung oder späte Bindung wird verknüpft, während ein Programm geladen wird (Ladezeit) oder ausgeführt (Laufzeit), anstatt wenn die ausführbare Datei erstellt wird. Eine dynamisch verknüpfte Bibliothek (Dynamische Link Bibliothek, oder dll, unter Fenster und OS/2; gemeinsameres Bild unter OpenVMS;[17] dynamisches gemeinsames Objekt oder DSO unter Unix-artig Systeme) ist eine Bibliothek, die für die dynamische Verknüpfung bestimmt ist. Nur eine minimale Menge an Arbeit wird von der erledigt Linker Wenn die ausführbare Datei erstellt wird; Es wird nur aufgezeichnet, welche Bibliotheksroutinen das Programm benötigt, und die Indexnamen oder -nummern der Routinen in der Bibliothek. Der Großteil der Verknüpfungsarbeiten erfolgt zum Zeitpunkt der Beladung der Anwendung (Ladezeit) oder während der Ausführung (Laufzeit). Normalerweise ist das notwendige Verknüpfungsprogramm, das als "dynamischer Linker" oder "Verknüpfungslader" bezeichnet wird Betriebssystem. (Es ist jedoch möglich und nicht überaus schwierig, ein Programm zu schreiben, das dynamische Verknüpfung verwendet und einen eigenen dynamischen Linker enthält, selbst für ein Betriebssystem, das selbst keine Unterstützung für die dynamische Verknüpfung bietet.)
Programmierer entwickelten ursprünglich eine dynamische Verknüpfung in der Mehrheit Betriebssystem ab 1964 und MTS (MTS (Michigan Terminalsystem), erbaut Ende der 1960er Jahre.[18]
Optimierungen
Da gemeinsame Bibliotheken in den meisten Systemen nicht häufig ändern, können Systeme eine wahrscheinliche Lastadresse für jede gemeinsame Bibliothek auf dem System berechnen, bevor sie benötigt wird, und diese Informationen in den Bibliotheken und ausführbaren Speichern speichern. Wenn jede gemeinsame Bibliothek, die geladen wird, diesen Prozess durchlaufen hat, lädt jeder an seiner vorgegebenen Adresse, was den Prozess der dynamischen Verknüpfung beschleunigt. Diese Optimierung ist als bekannt als Vorverknüpfung oder Vorverknüpfung auf macOS bzw. Linux. IBM Z/VM Verwendet eine ähnliche Technik, die als "diskontinuierliche gespeicherte Segmente" (DCSS) bezeichnet wird.[19] Zu den Nachteilen dieser Technik gehört die Zeit, die erforderlich ist, um diese Adressen jedes Mal vorzubereiten, wenn sich die gemeinsam genutzten Bibliotheken ändern, und die Unfähigkeit zu verwenden Adressraumlayout Randomisierung, und das Erfordernis eines ausreichenden virtuellen Adressraums für die Verwendung (ein Problem, das durch die Annahme von Verabschiedung von gelindert wird 64-Bit Architekturen, zumindest vorerst).
Bibliotheken zur Laufzeit suchen
Lader für gemeinsame Bibliotheken variieren stark in der Funktionalität. Einige hängen von der ausführbaren Datei ab, die explizite Pfade für die Bibliotheken speichert. Jede Änderung der Namensbibliotheksnamen oder des Layouts des Dateisystems führt dazu, dass diese Systeme fehlschlagen. Insgesamt wird in der ausführbaren Datei nur der Name der Bibliothek (und nicht der Pfad) gespeichert, wobei das Betriebssystem eine Methode zur Suche nach der Bibliothek auf der Festplatte basiert, basierend auf einem Algorithmus.
Wenn eine gemeinsame Bibliothek, von der eine ausführbare Datei abhängt, gelöscht, verschoben oder umbenannt wird oder wenn eine inkompatible Version der Bibliothek an einen Ort kopiert wird, der früher in der Suche vorliegt, würde die ausführbare Datei nicht geladen. Das nennt man Abhängigkeit Hölleauf vielen Plattformen vorhanden. Die (berüchtigte) Windows -Variante wird allgemein als bekannt als Dll Hölle. Dieses Problem kann nicht auftreten, wenn jede Version jeder Bibliothek einzigartig identifiziert wird und jedes Programm nur nach ihren vollständigen eindeutigen Kennungen verweist. Die "DLL Hell" -Probleme mit früheren Windows -Versionen entstanden nur aus der Verwendung der Namen von Bibliotheken, die nicht garantiert eindeutig waren, um dynamische Links in Programmen zu beheben. (Um "DLL HELL" zu vermeiden, beruhen spätere Versionen von Windows weitgehend auf Optionen für Programme, um private DLLs zu installieren - im Wesentlichen einen teilweisen Rückzug aus der Verwendung gemeinsamer Bibliotheken - mit Mechanismen, um den Austausch gemeinsamer System -DLLs durch frühere Versionen von ihnen zu verhindern. ))
Microsoft Windows
Microsoft Windows Überprüft Registrierung Um den richtigen Ort zu bestimmen, um die implementierenden DLLs zu laden Com ObjekteAber für andere DLLs werden die Verzeichnisse in einer definierten Reihenfolge überprüft. Erstens überprüft Windows das Verzeichnis, in dem das Programm geladen wurde (private DLL[16]); Alle Verzeichnisse, die mit dem aufrufen Setdlldirectory ()
Funktion; das System32, System- und Windows -Verzeichnisse; dann das aktuelle Arbeitsverzeichnis; und schließlich die vom Pfad festgelegten Verzeichnisse Umgebungsvariable.[20] Bewerbungen für die .NET Framework (Seit 2002) überprüfen Sie auch die Globaler Montage -Cache als primärer Speicher von gemeinsam genutzten DLL -Dateien, um das Problem zu entfernen Dll Hölle.
OpenStep
OpenStep verwendete ein flexibleres System, das eine Liste von Bibliotheken von einer Reihe bekannter Orte (ähnlich dem Pfadkonzept) sammelte, wenn das System zum ersten Mal beginnt. Das Umzug von Bibliotheken verursacht überhaupt keine Probleme, obwohl Benutzer beim ersten Starten des Systems eine Zeitkosten verursachen.
Unix-ähnliche Systeme
Die meisten Unix-artig Systeme haben einen "Suchpfad", das das Dateisystem angibt Verzeichnisse in der nach dynamischen Bibliotheken suchen. Einige Systeme geben den Standardpfad in a an Konfigurationsdatei, andere heften es in den dynamischen Lader. Etwas ausführbare Datei Formate können zusätzliche Verzeichnisse angeben, in denen nach Bibliotheken nach einem bestimmten Programm gesucht werden soll. Dies kann normalerweise mit einem außer Kraft gesetzt werden Umgebungsvariable, obwohl es deaktiviert ist für setUid und SETGID -Programme, damit ein Benutzer ein solches Programm nicht dazu zwingen kann, willkürlichen Code mit Root -Berechtigungen auszuführen. Entwickler von Bibliotheken werden ermutigt, ihre dynamischen Bibliotheken an Orten im Standard -Suchpfad zu legen. Auf der anderen Seite kann dies die Installation neuer Bibliotheken problematisch machen, und diese "bekannten" Standorte werden schnell zu einer zunehmenden Anzahl von Bibliotheksdateien zu Hause, was das Management komplexer macht.
Dynamische Belastung
Die dynamische Belastung, eine Untergruppe dynamischer Verknüpfung Laufzeit auf Anfrage. Eine solche Anfrage kann implizit oder explizit gestellt werden. Implizite Anfragen werden gestellt, wenn ein Compiler oder ein statischer Linker Bibliotheksreferenzen, die Dateipfade oder einfach Dateinamen enthalten, hinzufügen. Es werden explizite Anfragen gestellt, wenn Anwendungen direkte Anrufe bei der API eines Betriebssystems tätigen.
Die meisten Betriebssysteme, die dynamisch verknüpfte Bibliotheken unterstützen Laufzeit Linker API. Zum Beispiel, Microsoft Windows verwendet die API -Funktionen Lastlibrary
, Lastlibraryex
, Freiberufler
und GetProcaddress
mit Microsoft Dynamic Link Libraries; Posix-basierte Systeme, einschließlich der meisten UNIX- und UNIX-ähnlichen Systeme, verwenden DLOPEN
, dlclose
und dlsym
. Einige Entwicklungssysteme automatisieren diesen Prozess.
Objektbibliotheken
Obwohl ursprünglich in den 1960er Jahren Pionierarbeit, erreichte die Dynamikverknüpfung nicht Betriebssysteme von den Verbrauchern bis in die späten 1980er Jahre verwendet. In den meisten Betriebssystemen war es in den frühen neunziger Jahren in irgendeiner Form erhältlich. Im gleichen Zeitraum, Objekt orientierte Programmierung (OOP) wurde zu einem wesentlichen Teil der Programmierlandschaft. OOP mit Laufzeitbindung erfordert zusätzliche Informationen, die herkömmliche Bibliotheken nicht liefern. Zusätzlich zu den Namen und Einstiegspunkten des Code, in dem sich befindet, benötigen sie auch eine Liste der Objekte, von denen sie abhängen. Dies ist ein Nebeneffekt eines der Kernkonzepte von OOP, Vererbung, was bedeutet, dass Teile der vollständigen Definition einer Methode an verschiedenen Orten sein können. Dies ist mehr als nur die Auflistung, dass eine Bibliothek die Dienste eines anderen benötigt: In einem echten OOP -System sind die Bibliotheken selbst möglicherweise nicht bekannt bei Zeit kompilierenund variieren von System zu System.
Gleichzeitig arbeiteten viele Entwickler an der Idee von mehrstufigen Programmen, bei denen ein auf einem Desktop-Computer ausgeführter "Display" die Dienste von a nutzen würde Mainframe oder Minicomputer Für die Datenspeicherung oder -verarbeitung. Beispielsweise würde ein Programm auf einem GUI-basierten Computer Nachrichten an einen Minicomputer senden, um kleine Beispiele eines riesigen Datensatzes zur Anzeige zurückzugeben. Remote -Verfahrensanrufe (RPC) haben diese Aufgaben bereits behandelt, aber es gab kein Standard -RPC -System.
Bald leitete der Großteil der Minicomputer- und Mainframe -Anbieter Projekte zur Kombination der beiden an und produzierte ein OOP -Bibliotheksformat, das überall verwendet werden könnte. Solche Systeme wurden als bekannt als als Objektbibliotheken, oder verteilte Objekte, wenn sie Remote -Zugriff unterstützten (nicht alle). Microsofts COM ist ein Beispiel für ein solches System für die lokale Verwendung. DCOM, eine modifizierte Version von COM, unterstützt den Remote -Zugriff.
Für einige Zeit hielt Objektbibliotheken den Status der "nächsten großen Sache" in der Programmierwelt. Es gab eine Reihe von Anstrengungen, um Systeme zu erstellen, die auf Plattformen laufen würden, und die Unternehmen konkurrierten, um zu versuchen, Entwickler in ihr eigenes System einzuhalten. Beispiele beinhalten IBM's Systemobjektmodell (Som/dsom), Sun Microsystems' Verteilte Objekte überall (DAMHIRSCHKUH), Nächste's Tragbare verteilte Objekte (PDO), Digital's Objectbroker, Microsoft's Komponentenobjektmodell (Com/dcom) und eine beliebige Anzahl von Corba-basierte Systeme.
Klassenbibliotheken
Klassenbibliotheken sind das grobe OOP -Äquivalent älterer Arten von Codebibliotheken. Sie beinhalten Klassen, die Eigenschaften beschreiben und Handlungen definieren (Aktionen (Methoden) das beinhaltet Objekte. Klassenbibliotheken werden zum Erstellen verwendet Instanzenoder Objekte mit ihren Eigenschaften auf bestimmte Werte festgelegt. In einigen OOP -Sprachen wie JavaDie Unterscheidung ist klar, wobei die Klassen häufig in Bibliotheksdateien enthalten sind (wie Java's JAR -Dateiformat) und die instanziierten Objekte, die nur im Speicher leben (obwohl möglicherweise in der Lage sein kann, hergestellt zu werden hartnäckig in separaten Dateien). In anderen wie SmalltalkDie Klassenbibliotheken sind lediglich der Ausgangspunkt für a Systembild Dies schließt den gesamten Stand der Umwelt, des Klassens und aller sofortigen Objekte ein.
Heute werden die meisten Klassenbibliotheken in einem gespeichert Paketrepository (wie Maven Central für Java). Der Client -Code erklärt die Abhängigkeiten externer Bibliotheken ausdrücklich in bauen Konfigurationsdateien (z. B. ein Maven -Pom in Java).
Remote -Bibliotheken
Eine andere Bibliothekstechnik verwendet vollständig separate ausführbare Maße (häufig in einer leichten Form) und ruft sie mit a auf Remote -Verfahrensanruf (RPC) über ein Netzwerk zu einem anderen Computer. Dies maximiert die Wiederverwendung des Betriebssystems: Der Code, der zur Unterstützung der Bibliothek benötigt wird, ist der gleiche Code, der verwendet wird, um für jedes andere Programm Support und Sicherheit für Anwendungen bereitzustellen. Darüber hinaus müssen die Bibliothek nicht auf derselben Maschine vorhanden sein, sondern können die Anfragen über das Netzwerk weiterleiten.
Ein solcher Ansatz bedeutet jedoch, dass jeder Bibliotheksaufruf eine beträchtliche Menge an Gemeinkosten erfordert. RPC -Anrufe sind viel teurer als eine gemeinsame Bibliothek, die bereits auf demselben Computer geladen wurde. Dieser Ansatz wird üblicherweise in a verwendet Verteilte Architektur Das nutzt solche Remote-Anrufe stark, insbesondere Client-Server-Systeme und Anwendungsserver wie zum Beispiel Enterprise Javabeans.
Code -Generierungsbibliotheken
Code-Generierungsbibliotheken sind hochrangig Apis das kann erzeugen oder transformieren Byte -Code zum Java. Sie werden von verwendet von Aspekt-orientiertes Programmieren, einige Datenzugriffs -Frameworks und für Tests zur Generierung dynamischer Proxy -Objekte. Sie werden auch verwendet, um den Zugriff auf den Feld abzufangen.[21]
Datei Benennung
Modernste unixartige Systeme
Das System speichert libfoo.a
und libfoo.so
Dateien in Verzeichnissen wie z. /lib
, /usr/lib
oder /usr/local/lib
. Die Dateinamen beginnen immer mit lib
und enden mit einem Suffix von .a
(Archiv, statische Bibliothek) oder von .Also
(Shared Objekt, dynamisch verknüpfte Bibliothek). Einige Systeme haben möglicherweise mehrere Namen für eine dynamisch verknüpfte Bibliothek. Diese Namen haben normalerweise das gleiche Präfix und haben unterschiedliche Suffixe, die die Versionsnummer anzeigen. Die meisten Namen sind Namen für Symbolische Links zur neuesten Version. Zum Beispiel auf einigen Systemen libfoo.so.2
wäre der Dateiname für die zweite wichtige Schnittstellenrevision der dynamisch verknüpften Bibliothek libfoo
. Das .la
Dateien, die manchmal in den Bibliotheksverzeichnissen gefunden werden, sind libtool Archive, nicht vom System als solches verwendbar.
Mac OS
Das System erbt die statischen Bibliothekskonventionen von BSD, mit der Bibliothek in a .a
Datei und kann verwenden .Also
-Stil dynamisch verknüpfte Bibliotheken (mit dem .dylib
Suffix stattdessen). Die meisten Bibliotheken in MacOS bestehen jedoch aus "Frameworks", die in speziellen Verzeichnissen genannt werden. "Bündel"Das wickelte die erforderlichen Dateien und Metadaten der Bibliothek ein. Zum Beispiel ein Framework aufgerufen MyFramework
würde in einem Bundle genannt werden MyFramework.Framework
, mit MyFramework.Framework/MyFramework
entweder die dynamisch verknüpfte Bibliotheksdatei oder ein Symlink für die dynamisch verknüpfte Bibliotheksdatei in sein MyFramework.framework/Version/Current/MyFramework
.
Microsoft Windows
Dynamische Linkbibliotheken Normalerweise das Suffix haben *.Dll
,[22] Obwohl andere Erweiterungen von Dateinamen dynamisch verknüpfte Bibliotheken identifizieren können, z. *.Ocx
zum Ole Bibliotheken. Die Schnittstellenrevisionen werden entweder in den Dateinamen codiert oder abstrahiert mithilfe mit Kombi Schnittstellen. Je nachdem, wie sie zusammengestellt werden, *.Lib
Dateien können entweder statische Bibliotheken oder Darstellungen dynamisch verknüpfbarer Bibliotheken sein, die nur während der Kompilierung benötigt werden, die als "bekannt"Bibliotheken importieren". Anders als in der Unix World, die unterschiedliche Dateierweiterungen verwendet, wenn sie verknüpft .Lib
Datei in Fenster Man muss zuerst wissen, ob es sich um eine reguläre statische Bibliothek oder eine Importbibliothek handelt. Im letzteren Fall a .Dll
Die Datei muss zur Laufzeit vorhanden sein.
Siehe auch
- Code -Wiederverwendung
- Linker (Computing)- Computerprogramm, das mehrere Objektdateien in einer einzelnen Datei kombiniert
- Loader (Computing)- Teil eines Betriebssystems
- Dynamische Link Bibliothek- Microsoft -Implementierung des gemeinsam genutzten Bibliothekskonzepts in Windows und OS/2
- Objektdatei- Datei mit lockerem Format -Maschinencode enthält
- Plug-In- Softwarekomponente, die einer vorhandenen Softwareanwendung eine bestimmte Funktion hinzufügt
- Prelinkauch als Vorbereitung bekannt
- Statische Bibliothek
- Laufzeitbibliothek
- Bibliothek für visuelle Komponenten- visuelle Bibliothek (VCL)
- Komponentenbibliothek für Cross -Plattform (CLX)
- C Standardbibliothek- Standardbibliothek für die C -Programmiersprache
- Java -Klassenbibliothek
- Framework -Klassenbibliothek- Standardbibliothek von Microsoft .NET Framework
- Generische Programmierung- Stil der Computerprogrammierung (verwendet von der C ++ Standardbibliothek)
- Soname- Datenfeld in einer gemeinsam genutzten Objektdatei
- Methode Stub
Anmerkungen
- ^ Es war früher zwischen, z. B. ADA -Subprogrammen möglich.
- ^ Einige ältere Systeme, z. B.,, Burroughs MCP, MehrheitSie haben auch nur ein einziges Format für ausführbare Dateien, unabhängig davon, ob sie gemeinsam genutzt werden.
Verweise
- ^ dx.doi.org. doi:10.1107/s1600576715005518/FS5094SUP1.zip http://dx.doi.org/10.1107/S1600576715005518/FS5094SUP1.zip. Abgerufen 2021-05-27.
{{}}
: Fehlen oder leer|title=
(Hilfe) - ^ Deshpande, Prasad (2013). Metamorphe Erkennung mit Funktionsaufruf -Diagrammanalyse (These). Bibliothek der San Jose State University. doi:10.31979/etd.t9xm-ahsc.
- ^ "Statische Bibliotheken". TLDP. Archiviert vom Original am 2013-07-03. Abgerufen 2013-10-03.
- ^ Goldstine, Herman H. (2008-12-31). Der Computer von Pascal nach von Neumann. Princeton: Princeton University Press. doi:10.1515/9781400820139. ISBN 978-1-4008-2013-9.
- ^ Goldstine, Herman; Von Neumann, John (1947). Planung und Codierung von Problemen für ein elektronisches Computerinstrument (Bericht). Institut für fortgeschrittenes Studium. p. 3, 21–22. OCLC 26239859.
Es wird wahrscheinlich sehr wichtig sein, eine umfangreiche "Bibliothek" von Unterroutinen zu entwickeln
- ^ Wilkes, M. V. (1951). "Der EDSAC -Computer". 1951 Internationaler Workshop zum Verwalten von Anforderungen Wissen. 1951 Internationaler Workshop zum Verwalten von Anforderungen Wissen. IEEE. p. 79. doi:10.1109/afips.1951.13.
- ^ Campbell-Kelly, Martin (September 2011). "Lob von 'Wilkes, Wheeler und Gill' '". Kommunikation der ACM. 54 (9): 25–27. doi:10.1145/1995376.1995386. S2CID 20261972.
- ^ Wilkes, Maurice; Wheeler, David; Gill, Stanley (1951). Die Vorbereitung von Programmen für einen elektronischen digitalen Computer. Addison-Wesley. p. 45, 80–91, 100. OCLC 641145988.
- ^ Wexelblat, Richard (1981). Geschichte der Programmiersprachen. ACM -Monographieserie. New York, NY: Akademische Presse (eine Tochtergesellschaft von Harcourt -Klammer). p.274. ISBN 0-12-745040-8.
- ^ Wexelblat, op. cit., p. 258
- ^ Wilson, Leslie B.; Clark, Robert G. (1988). Vergleichende Programmiersprachen. Wokingham, England: Addison-Wesley. p. 126. ISBN 0-201-18483-4.
- ^ Wilson und Clark, op. cit., p. 52
- ^ Wexelblat, op. cit., p. 716
- ^ Kaminsky, Dan (2008), "Tragbare ausführbare Datei- und ausführbare Datei- und Verknüpfungsformate", Reverse Engineering Code mit IDA ProElsevier, S. 37–66, doi:10.1016/b978-1-59749-237-9.00003-x, ISBN 978-1-59749-237-9, abgerufen 2021-05-27
- ^ Christian Collberg, John H. Hartman, Sridivya Babu, Sharath K. Udupa (2003). "Slinky: Statische Verknüpfung neu geladen". Abteilung für Computerwissenschaften, Universität von Arizona. Archiviert vom Original am 2016-03-23. Abgerufen 2016-03-17.
{{}}
: CS1 Wartung: Verwendet Autorenparameter (Link) - ^ a b Anderson, Rick (2000-01-11). "Das Ende der Hölle". microsoft.com. Archiviert von das Original Am 2001-06-05. Abgerufen 2012-01-15.
Private DLLs sind DLLs, die mit einer bestimmten Anwendung installiert und nur von dieser Anwendung verwendet werden.
- ^ "VSI OpenVMS Linker Utility Manual" (PDF). Vsi. August 2019. Abgerufen 2021-01-31.
- ^ "Eine Geschichte der Mts". Informationstechnologie Digest. 5 (5).
- ^ IBM Corporation (2011). Gespeicherte Segmente Planung und Verwaltung (PDF). Abgerufen 2022-01-29.
- ^ "Dynamic-Link Library Suchreihenfolge". Microsoft Developer Network Library. Microsoft. 2012-03-06. Archiviert vom Original am 2012-05-09. Abgerufen 2012-05-20.
- ^ "Code Generation Library". Quelle Forge. Archiviert vom Original am 01.01.2010 Uhr. Abgerufen 2010-03-03.
Die Bibliothek für Byte -Codegenerierung ist eine hochstufige API, um Java -Byte -Code zu generieren und zu transformieren. Es wird von AOP, Tests, Datenzugriffs -Frameworks verwendet, um dynamische Proxy -Objekte und den Zugriff auf den Abfangfeld zu generieren.
- ^ Bresnahan, Christine; Blum, Richard (2015-04-27). LPIC-1 Linux Professional Institute Certification Study Guide: Prüfung 101-400 und Prüfung 102-400. John Wiley & Sons (veröffentlicht 2015). p. 82. ISBN 9781119021186. Archiviert vom Original am 2015-09-24. Abgerufen 2015-09-03.
Linux Shared Libraries ähneln den dynamischen Link -Bibliotheken (DLLs) von Windows. Windows -DLLs werden normalerweise durch identifiziert
.dll
Dateiname -Erweiterungen.
Weitere Lektüre
- Levine, John R. (2000) [Oktober 1999]."Kapitel 9: Shared Libraries & Kapitel 10: Dynamisches Verknüpfen und Laden". Linker und Lader.Die Morgan Kaufmann -Serie in Software Engineering and Programming (1 Ed.).San Francisco, USA: Morgan Kaufmann. ISBN 1-55860-496-0. OCLC 42413382. Archiviert vom Original am 2012-12-05. Abgerufen 2020-01-12. Code: [1][2] Errata: [3]
- Artikel Anfängerleitfaden für Linker von David Drysdale
- Artikel Schnellere C ++ -Programm -Startups durch Verbesserung der Laufzeitverbindungseffizienz Von Léon Bottou und John Ryland
- So erstellen Sie Programmbibliotheken von Baris Simsek
- Bfd - Die Binärdatei -Deskriptorbibliothek
- 1. bibliotheksorientierte Software-Design Workshop LCSD'05 Archiviert 2019-08-28 bei der Wayback -Maschine bei oopsla'05
- 2. bibliotheksorientierte Software-Design Workshop LCSD'06 bei oopsla'06
- So erstellen Sie eine gemeinsame Bibliothek von Ulrich Drepper (mit vielen Hintergrundinformationen)
- Anatomie von Linux -dynamischen Bibliotheken bei ibm.com