Technologieaustausch

Wie der Linker funktioniert, der Unterschied zwischen statischem Linken und dynamischem Linken, wie man dynamische Linkbibliotheken erstellt und verwendet

2024-07-08

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Der Linker spielt eine wichtige Rolle bei der Programmentwicklung. Er ist für die Integration mehrerer Objektdateien und Bibliotheksdateien in eine ausführbare Datei verantwortlich. Bevor wir uns mit der Funktionsweise des Linkers, dem Unterschied zwischen statischem Linken und dynamischem Linken und der Erstellung und Verwendung dynamischer Linkbibliotheken befassen, wollen wir zunächst die Grundfunktionen des Linkers skizzieren.

So funktioniert der Linker

Linker Es handelt sich um ein Tool, das für die Kombination einer oder mehrerer Objektdateien und Bibliotheksdateien zu einer ausführbaren Datei verantwortlich ist. Zu seinen Hauptfunktionen gehören:

  1. Symbolanalyse : Identifizieren und verarbeiten Sie alle Symbole (Namen von Funktionen und Variablen) im Programm und stellen Sie sicher, dass jedes Symbol eine eindeutige Definition hat. Für Symbole, auf die verwiesen, aber nicht definiert wird (externe Symbole), sucht der Linker nach einer Definition in einer bereitgestellten Bibliothek oder einer anderen Objektdatei.

  2. zurücksetzen : Passen Sie die Code- und Datenadressen in jedem Modul an die endgültige Speicheradresse an. Die Verlagerung umfasst eine Adresskorrektur im Code und eine Positionsanpassung des Datensegments, um sicherzustellen, dass alle Referenzen auf den richtigen Speicherort verweisen.

  3. Segmente zusammenführen: Segmente desselben Typs (z. B. Codesegmente, Datensegmente usw.) aus verschiedenen Zieldateien zu einem fortlaufenden Segment zusammenführen.

  4. Verarbeitungsbibliothek : Verknüpfen Sie den vom Programm benötigten Bibliothekscode mit der Objektdatei. Der Linker kann zwei Arten von Bibliotheken verarbeiten: statische Bibliotheken und dynamische Bibliotheken.

  5. Ausführbare Datei generieren: Die endgültige Ausgabe ist eine ausführbare Datei, die auf dem Betriebssystem ausgeführt werden kann.

Der Unterschied zwischen statischer Verknüpfung und dynamischer Verknüpfung

Statische Verknüpfung UndDynamische Verknüpfung Es handelt sich um zwei Arbeitsmodi des Linkers mit jeweils unterschiedlichen Eigenschaften und Verwendungsszenarien.

statischer Link
  • Konzept : Bei der statischen Verknüpfung wird der Bibliothekscode zur Kompilierungszeit kopiert und in jede ausführbare Datei eingebettet, die ihn verwendet. Auf diese Weise enthält die generierte ausführbare Datei den gesamten erforderlichen Code und ist nicht auf externe Bibliotheksdateien angewiesen.

  • Vorteil

    • Starke Unabhängigkeit: Die generierte ausführbare Datei enthält alle Abhängigkeiten und erfordert zur Laufzeit keine zusätzlichen Bibliotheksdateien.
    • Gute Kompatibilität: Die Laufzeit hängt nicht von der im System installierten Bibliotheksversion ab und es tritt nicht das Problem eines „Bibliotheksversionskonflikts“ auf.
  • Mangel

    • Große Dateigröße: Jede ausführbare Datei enthält vollständigen Bibliothekscode, was zu einer erhöhten Dateigröße führt.
    • Update-Problem: Wenn die Bibliothek aktualisiert wird, müssen alle Programme, die die Bibliothek verwenden, neu kompiliert werden.
  • Statische Bibliothekserweiterung

    • Windows: .lib
    • Unix/Linux: .a
dynamischer Link
  • Konzept : Bei der dynamischen Verknüpfung wird der Bibliothekscode zur Laufzeit geladen und nicht in die ausführbare Datei eingebettet. Die ausführbare Datei enthält nur Verweise auf Bibliotheken und der Bibliothekscode wird zur Laufzeit vom Betriebssystem geladen.

  • Vorteil

    • Geringe Dateigröße: Die ausführbare Datei enthält keinen Bibliothekscode, sondern nur Verweise auf die Bibliothek.
    • Einfache Aktualisierung: Das Aktualisieren von Bibliotheken erfordert keine Neukompilierung des Programms, sondern lediglich das Ersetzen der Bibliotheksdateien.
    • Hohe Speichereffizienz: Mehrere Programme können Speicherinstanzen derselben Bibliotheksdatei gemeinsam nutzen, wodurch die Speichernutzung reduziert wird.
  • Mangel

    • Starke Abhängigkeiten: Die ausführbare Datei muss in der Lage sein, beim Ausführen die richtige Version der Bibliotheksdatei zu finden und zu laden.
    • Kompatibilitätsprobleme: Nicht übereinstimmende Versionen der Bibliotheksdateien können dazu führen, dass das Programm fehlschlägt.
  • Dynamische Bibliothekserweiterung

    • Windows: .dll(Dynamische Link Bibliothek)
    • Unix/Linux: .so(Gemeinsames Objekt)

Erstellen und verwenden Sie dynamische Linkbibliotheken

Erstellen Sie eine dynamische Linkbibliothek

Auf verschiedenen Betriebssystemen unterscheiden sich die Methoden zum Erstellen dynamischer Linkbibliotheken geringfügig. Hier sind einige allgemeine Schritte und Befehle:

Erstellen Sie eine dynamische Linkbibliothek unter Linux
  1. Schreiben Sie Bibliothekscode

    Erstellen Sie eine C-Quelldatei mit den Funktionen, die wir in der dynamischen Bibliothek platzieren möchten.

    // example.cpp
    #include