Freitag, Februar 21, 2020

Das Programm statisch gelinkt, um eine Bibliothek muss jedoch noch die dll ausgeführt werden

Es gibt Dinge, die verstehe ich nicht, wenn es um Vernetzung geht… ich Schreibe ein Programm, das eine 3rd-party-Bibliothek (die GEOS-Bibliothek). Dieses Programm hat eine Abhängigkeit zu geos.lib braucht aber auch noch geos.dll zu laufen.

Lese ich diese Frage, ich glaube, ich verstehe den Unterschied zwischen statischen und dynamischen Bibliotheken. Was ich nicht verstehe, ist, warum brauche ich noch eine dll, wenn ich statisch link eine Bibliothek.

InformationsquelleAutor undu | 2012-06-15

5 Kommentare

  1. 23

    Es ist nicht statisch gelinkt. Die .lib ist nur ein stub-Bibliothek, die bindet .dll unter windows. Das heißt, Sie verknüpfen mit der .lib zur compile-Zeit und zur Laufzeit wird die Suche nach dem .dll.

    • Gibt es keine Optionen, die es erlauben die statische link-code aus allem .dll-Datei?
    • Ich denke, man muss zum kompilieren der Bibliothek für statische Links, ich bin nicht sicher, dass Sie ändern können, eine dll in eine statisch verknüpfte Bibliothek, nachdem es kompiliert wurde.
    • So, die dll-Dateien immer mit ein .lib ? Wie weiß ich, Wann die .lib ist nicht ausreichend und ich muss die dll ?
    • Unter Windows, ja, so muss man immer den link mit ein .lib dynamisch Verknüpfung mit einer dll. Die dll-Lieferant wird immer auch für Sie irgendwo. Du meinst wie weißt du, wenn die .lib ist eine statische Bibliothek? Sie können prüfen, diese Eigenschaften in visual studio, denke ich.
    • Wenn die lib verlinkt ist eine statische verlinkten lib exportieren von Funktionen aus einer dll, dann, wenn die dll nicht im Pfad suchen, wird die Anwendung nicht mehr starten. Sie können load-time dynamic linking oder run-time dynamic linking. Auch gibt es einen linker-flag (don ‚ T an den Namen erinnern), der ermöglicht, Sie zu verschieben load-time dynamic linking, zu dem moment der ersten Funktion aus der dll aufgerufen wird.
    • Ich hasse wiederauferstehen zu lassen eine alte post, aber dies war meine erste google Ergebnis. msdn.microsoft.com/en-us/library/yx9zd12s.aspx /DELAYLOAD verzögert DLL Belastung bis zum ersten Anruf.
    • Stellt sich die Frage, wie zu wissen, ob die lib ist ein Objekt-Bibliothek oder Bibliothek importieren: stackoverflow.com/q/6402586/11722

  2. 29

    Es gibt 3 Arten von Bibliotheken auf Windows:

    • Objekt-Bibliothek (*.lib)
    • import-Bibliothek (*.lib)
    • dynamische Bibliothek (*.dll)

    Objekt-Bibliotheken statisch gelinkt. Sie enthalten die vollständige Objekt-Definitionen der code abstrahiert von der Bibliothek.

    import-Bibliotheken ist eine spezielle form einer Objekt-Bibliothek. Anstatt mit code, den Sie enthalten Informationen für den linker, ordnet schließlich die ausführbare Datei der dynamic link-Bibliothek.

    dynamische link-Bibliotheken, wie z.B. Objekt-Bibliotheken, supply-code für Ihr Programm. Aber dieser code wird zur Laufzeit geladen wird und nicht kompiliert wird in der exe-Datei.

    Werden Sie nicht immer brauchen, um link eine import-Bibliothek. Stattdessen können Sie LoadLibrary() und lookup der API-Eintrag Punkte durch Namen oder Ordinalzahl. (Man muss immer sagen, der code, die DLL und wo in dieser DLL API, die Sie eingeben möchten.)

    Die anderen Kommentare sind hier richtig, dass Sie nicht eine DLL in eine statische lib, die ohne neu kompilieren Sie den code für die Bibliothek-es ist eine andere Art von Ausgabe.

    • Beginner ‚ s Guide to Linkers ist ein großer Artikel über die Verknüpfung. Ich fand es diese Woche während den Recherchen zu diesem genau die gleiche Frage.
  3. 1

    Wenn .lib war von Visual Studio erstellt dann überprüfen Sie den Wert der Projekt-Eigenschaften -> Linker -> Eingang -> Module-definitions-Datei. Wenn Sie nicht leer ist dann link.exe erstellen der stub-Bibliothek statt der statischen Bibliothek, auch wenn Projekt-Eigenschaften -> allgemein -> Konfiguration-Typ „Static library (.lib)“.

  4. 0

    Sind Sie auf jeden Fall die Verknüpfung zu einer dynamischen Bibliothek.
    Nur weil der linker benötigt .lib-Datei bedeutet nicht, du bist eine Verknüpfung zu einer statischen Bibliothek.

  5. 0

    Kann statisch verknüpft werden, die lib-Datei, wenn und nur wenn es eine statische lib-Datei. So müssen Sie zuerst konvertieren Sie Ihre dll-Projekt, um die statische lib, es zu bauen und nach, dass das Produkt verwenden, das von Ihr zu bauen, das eine statische .lib-Datei.

Kostenlose Online-Tests