Frage

Ich weiß sehr wenig über DLL und LIB des anderen, als dass sie lebenswichtigen Code enthalten für ein Programm erforderlich ordnungsgemäß ausgeführt - Bibliotheken. Aber warum sie Compiler generieren überhaupt? Wäre es nicht einfacher, nur den Code in einer einzigen ausführbaren Datei schließen? Und was ist der Unterschied zwischen DLL und LIB ist?

War es hilfreich?

Lösung

Es gibt statische Bibliotheken (LIB) und dynamische Bibliotheken (DLL).

Bibliotheken verwendet werden, da Sie Code haben, die Sie in vielen Programmen verwendet werden soll. Zum Beispiel, wenn Sie eine Funktion schreiben, die die Anzahl der Zeichen in einem String zählt, wird diese Funktion in vielen Programmen nützlich sein. Sobald Sie diese Funktion erhalten korrekt arbeiten möchten Sie nicht haben den Code neu kompilieren jedes Mal, wenn Sie es verwenden, so stellen Sie den ausführbaren Code für diese Funktion in einer Bibliothek, und der Linker den kompilierten Code in Ihr Programm extrahieren und einzufügen . Statische Bibliotheken werden manchmal ‚Archiv‘ aus diesem Grund genannt.

Dynamische Bibliotheken nehmen diesen einen Schritt weiter. Es scheint verschwenderisch mehrere Kopien der Bibliotheksfunktionen Raum in jedem der Programme Aufnahme zu haben. Warum können sie nicht alle teilen eine Kopie der Funktion? Dies ist, was dynamische Bibliotheken sind für. Anstatt den Aufbau der Bibliothek Code in Ihr Programm, wenn es kompiliert wird, kann es durch die Abbildung es in Ihrem Programm ausgeführt werden, wie es in den Speicher geladen wird. Mehrere Programme gleichzeitig laufen, die die gleichen Funktionen verwenden können alle 1 Aktie kopieren, speichern Speicher. In der Tat können Sie dynamische Bibliotheken nur nach Bedarf, je nach dem Weg durch den Code laden. Kein Punkt in den Druckerroutinen mit Speichern Aufnahme, wenn Sie keinen Druck tun. Auf der anderen Seite bedeutet dies eine Kopie der dynamischen Bibliothek auf jedem Rechner installiert hat Ihr Programm läuft. Dies schafft seine eigenen Probleme.

Als Beispiel fast jedes Programm in ‚C‘ geschrieben werden Funktionen aus einer Bibliothek muß so genannten ‚C-Laufzeitbibliothek, obwohl nur wenige Programme werden alle Funktionen benötigen. Die C-Laufzeit kommt in sowohl statische als auch dynamische Versionen, so dass Sie, welche Version Ihr Programm je nach speziellen Bedürfnissen bestimmen können.

Andere Tipps

Ein weiterer Aspekt ist die Sicherheit (Verschleierung). Sobald ein Stück Code aus der Hauptanwendung extrahiert und in einem „getrennt“ Dynamic-Link Library, es leichter zu attackieren ist, analysieren (Reverse Engineering), um den Code, da sie isoliert wurde. Wenn das gleiche Stück Code in einer LIB-Bibliothek aufbewahrt wird, ist es Teil der kompilierten (verknüpft) Zielanwendung ist, und diese somit schwieriger zu isolieren (unterscheiden) das Stück Code aus dem Rest der Ziel Binärdateien.

Ein wichtiger Grund für eine DLL / LIB zu schaffen, anstatt nur den Code in eine ausführbare Datei kompilieren ist die Wiederverwendung und Verlagerung. Die durchschnittliche Java oder .NET-Anwendung (zum Beispiel) wird höchstwahrscheinlich verwendet mehrere dritte Partei (oder Rahmen) Bibliotheken. Es ist viel einfacher und schneller zu kompilieren nur gegen eine vorgefertigte Bibliothek, anstatt alle des 3rd-Party-Code in Ihre Anwendung zu kompilieren. Kompilieren Sie den Code in Bibliotheken fördert auch gutes Design Praktiken, z.B. Ihre Klassen Gestaltung in verschiedenen Arten von Anwendungen verwendet werden.

Eine DLL ist eine Bibliothek von Funktionen, die unter anderen ausführbaren Programmen gemeinsam genutzt werden. Schauen Sie einfach in Ihrem Windows / system32-Verzeichnis und Sie werden Dutzende von ihnen finden. Wenn Ihr Programm eine DLL erstellt auch sie normalerweise erstellt eine Lib-Datei so, dass die Anwendung * .exe Programmsymbole lösen können, die in der DLL deklariert werden.

A LIB ist eine Bibliothek von Funktionen, die zu einem Programm statisch verknüpft sind - sie werden von anderen Programmen nicht mit anderen geteilt werden. Jedes Programm, das mit einer * LIB-Datei verknüpft hat den gesamten Code in dieser Datei. Wenn Sie zwei Programme a.exe und B.exe haben, die mit C.lib verknüpfen dann jeweils A und B beide enthalten den Code in C.lib.

Wie Sie erstellen DLLs und Bibliotheken sind abhängig von der Compiler Sie verwenden. Jeder Compiler macht es anders.

Ein weiterer Unterschied liegt in der Leistung.

Da die DLL zur Laufzeit durch die EXE geladen wird (s), die .exe (en) und die DLL Arbeit mit Shared-Memory-Konzept und damit die Leistung gering ist relativ zu statischen Linken.

Auf der anderen Seite, eine Lib ist Code, der statisch bei der Kompilierung in jeden Prozess verknüpft ist, anfordert. Daraus ergibt sich die .exe (en) werden einzelne Speicher, wodurch die Leistungsfähigkeit des Verfahrens erhöht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top