2017-10-12 1 views
4

Was ist eine Laufzeitbibliothek? Ich habe gelesen this und damit habe ich ein gutes Verständnis über seinen Zweck, aber ist es eine Datei? Ist es etwas, das Sie explizit wie die Standardbibliothek aufnehmen können?Was genau ist eine Laufzeitbibliothek?

+0

@ user0042 danke für die Eingabe, aber wie zeigt das, was eine Laufzeitbibliothek praktisch ist? Wie eine physische Datei, die Sie selbst lesen, einschließen, etc ... – Rocket

+0

Wie ich schon sagte, habe ich _have_ gelesen über den Begriff. Ich würde einfach einige Beispiele dafür lieben, was sie sein können. – Rocket

+0

Eine Laufzeitbibliothek ist eine Sammlung von Code (Funktionen usw.), die ein Benutzerprogramm (z. B. eines, das Sie schreiben) benötigt, um ordnungsgemäß zu funktionieren. Zum Beispiel ist die C++ - Standardbibliothek und der Code, der vor dem Aufruf Ihrer 'main()' -Funktion ausgeführt wird, normalerweise Teil einer Laufzeitbibliothek - die meisten C++ - Programme können ohne sie nichts Nützliches tun. Die Laufzeitbibliothek kann eine separate ausführbare Datei sein (z. B. ein Windows-DLL-Fenster, in dem Ihr Programm nicht ausgeführt werden kann), oder der Linker kann Code direkt in Ihre ausführbare Datei kopieren, wenn Ihr Programm "Standalone" oder eine Kombination dieser Programme ausführt . Die Möglichkeiten gehen weiter – Peter

Antwort

1

Es gibt statische und dynamische (Laufzeit) Bibliotheken.

Code aus statischen Bibliotheken wird zur Kompilierungszeit in Ihre ausführbare Datei eingefügt (der Linker tut dies). So kann dieser Code die ausführbare Datei aufblähen, aber es ist auf jedem Computer der gleiche Code.

Wenn Sie dynamische Bibliotheken verwenden (.dll in Windows, .so in Linux), wird die Funktion nur als Verknüpfung gespeichert (rufen Sie XYZ() von ABC.dll auf). Beim Ausführen der Binärdatei lädt das Betriebssystem die Bibliotheken in den Adressraum Ihrer ausführbaren Datei und löst die Verknüpfungen auf. Ihre ausführbare Datei ist also kleiner und die Bibliothek kann von vielen Programmen verwendet werden. Wenn sich in dieser Bibliothek Fehler befinden, muss diese nur einmal für jedes Programm ersetzt werden. Aber das funktioniert nur, wenn die Schnittstelle der Bibliothek nur mit Vorsicht verändert wird, sonst - Willkommen in der DLL-Hölle.

2

In erster Linie ist es Konzept: der Code, der erforderlich ist, um Sprachfeatures auf der Zielplattform bereitzustellen.

d. H. Es ist die Implementierung von strlen und feclearexcept und alle anderen Standardbibliotheksfunktionen, die die Sprache zur Verfügung stellt.

Es kann auch "glue code" enthalten, z. B. um sicherzustellen, dass Ihr 'main' beim Programmstart mit den richtigen Argumenten aufgerufen wird, und andere Interaktionen mit dem Zielbetriebssystem.


Wie viele Konzepte, es hat verschiedene „physische“ Manifestationen (als physisches als eine Datei sein kann). Sie hängen von Implementierungsdetails der Sprache, aber häufig sind:

  • Header-Dateien während der Kompilierung, die Inline-Implementierungen enthalten (zB den Standard Template Libary)

  • statische Bibliotheken (OBJ oder LIB) Dateien, die bereits kompilierte Funktionen enthalten und beim Linken in Ihre ausführbare Datei eingebunden werden.

  • dynamische Bibliotheken (.dll oder .so) Dateien, die während der Ausführung

  • "spezielle Sachen der Compiler oder Linker tun" bei der Erstellung von ausführbaren

Eine typische C verfügbar sein müssen ++ Programm könnte "alle oben genannten" sehen.

die statischen Bibliotheken werden typischerweise aus C, C++ oder Assembler-Code erzeugt, der die Standard-Bibliotheksfunktionen implementiert, die oft fucntionality des Zielbetriebssystem (zB Windows-CreateFile für fstreams)

die dynamischen Bibliotheken Paket (große Teile) Diese statischen Bibliotheken als .dll oder .so.

Für die Verwendung dynamischer Bibliotheken muss die entsprechende Laufzeit auf der Zielplattform installiert werden. Wenn Sie sie verwenden, wird die Größe der ausführbaren Datei reduziert und die bereits installierte Anwendung profitiert von Aktualisierungen der Laufzeit.


Wie bereits erwähnt, ist dies Implementierung abhängig. Es kann eine beliebige Anzahl zusätzlicher Dateien (z. B. Datendateien, Konfigurationsdateien, Debugsymbole, Symbole usw.) geben, die mit der Laufzeitumgebung verknüpft sind und in dieser enthalten sind.

Ein weiterer wichtiger Aspekt hier: Die Sprache bietet eine Abstraktion der Zielplattform, die Abstraktionsschicht ist in der Laufzeit implementiert.