Heim >Betrieb und Instandhaltung >Betrieb und Wartung von Linux >Was ist der Unterschied zwischen dynamischen Bibliotheken und statischen Bibliotheken unter Linux?

Was ist der Unterschied zwischen dynamischen Bibliotheken und statischen Bibliotheken unter Linux?

青灯夜游
青灯夜游Original
2021-11-23 11:08:506314Durchsuche

Unterschied: 1. Die statische Bibliothek wird beim Kompilieren des Programms mit dem Zielcode verbunden, und die statische Bibliothek wird nicht mehr benötigt, wenn das Programm ausgeführt wird Das Programm ist kompiliert, wird aber geladen, wenn das Programm ausgeführt wird. Daher muss die dynamische Bibliothek vorhanden sein, wenn das Programm ausgeführt wird. 2. Die von dynamischen Bibliotheken generierten Dateien sind relativ klein, während die von statischen Bibliotheken generierten Dateien relativ groß sind.

Was ist der Unterschied zwischen dynamischen Bibliotheken und statischen Bibliotheken unter Linux?

Die Betriebsumgebung dieses Tutorials: CentOS 6-System, Dell G3-Computer.

Die Ähnlichkeiten und Unterschiede zwischen dynamischen Bibliotheken und statischen Bibliotheken in Linux

Gleiche Punkte:

Sowohl statische als auch dynamische Bibliotheken werden durch .o-Dateien erstellt. Daher müssen wir zuerst das Quellprogramm über gcc in eine .o-Datei kompilieren.

1. Die Ladezeit des Codes ist unterschiedlich. Die statische Bibliothek wird mit dem Zielcode verbunden Wenn das Programm kompiliert wird, wird die statische Bibliothek nicht mehr benötigt, wenn das Programm ausgeführt wird. Die dynamische Bibliothek wird beim Kompilieren des Programms nicht mit dem Zielcode verbunden, sondern erst geladen, wenn das Programm ausgeführt wird Wenn das Programm ausgeführt wird, müssen daher auch dynamische Bibliotheken vorhanden sein Die dynamische Funktionsbibliothek wird während der Kompilierung nicht in den Zielcode kompiliert. Ihr Programm ruft die entsprechende Funktion in der Funktionsbibliothek nur auf, wenn es die entsprechende Funktion erreicht, sodass die von der dynamischen Funktionsbibliothek generierte ausführbare Datei relativ klein ist.

Dynamische Bibliothek Kompilierung:

Das Wichtigste ist eine GCC-Befehlszeilenoption, -shared Diese Option gibt an, eine dynamische Linkbibliothek zu generieren, zum Beispiel:

g++ -shared -o libd1.so d1.o /*Erstellen Sie die dynamische Bibliotheksdatei d1.so basierend auf der Zwischenzieldatei d1.o*/
  • g++ - shared -o libd2.so d2.o /*Erstellen Sie die dynamische Bibliotheksdatei d2.so basierend auf der Zwischenzieldatei d2.o*/
  • Statische Bibliothekskompilierung
  • Der Name der Klassenbibliothek lautet im Allgemeinen libxxx.a. Die kompilierte Datei ist relativ groß, da alle Daten der gesamten Funktionsbibliothek in den Zielcode integriert werden Es ist offensichtlich, dass das kompilierte Ausführungsprogramm keine externe Funktionsbibliotheksunterstützung benötigt, da alle verwendeten Funktionen bereits kompiliert wurden. Dies ist natürlich auch ein Nachteil, denn wenn sich die statische Funktionsbibliothek ändert, muss Ihr Programm neu kompiliert werden.

Verwenden Sie unter UNIX den Befehl ar, um eine statische Bibliothek zu erstellen oder zu betreiben. ar Archivefile objfile

    archivefile: archivefile ist der Name der statischen Bibliothek.
  • objfile: objfile ist der Name der Zwischenzieldatei mit der Erweiterung .o. es kann mehrere Parallelen geben;

Zum Beispiel:

g++ -o hello.o -c hello.cpp
ar cqs libHello.a hello.o
Verwandte Empfehlungen: „Linux Video Tutorial

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen dynamischen Bibliotheken und statischen Bibliotheken unter Linux?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn