Warum erstellt Visual Studio eine .LIB zusammen mit der .DLL?

8

Ich habe ein Projekt "Logger" mit dem Konfigurationstyp .dll.

"Logger" verwendet "libconfig" (ein Open-Source-Config-Parser). Derzeit habe ich ein separates Projekt für "libconfig" und sein Konfigurationstyp ist .lib

Ich habe "libconfig" zu Logger's Frameworks und Referenzen hinzugefügt mit:

  • Verbindungsbibliothek dependencies = true
  • Verwenden Sie Bibliotheksabhängigkeitseingaben = false

In Loggers Linker-Befehlszeile sehe ich: / IMPLIB: "Pfad \ zu \ Logger.lib"

Meine Frage ist: Warum muss Logger.lib erstellt werden? Aha / OUT="Pfad \ zu \ Logger.dll", aber ich versuche, den Build-Prozess von Visual Studio zu verstehen.

Von M $ IMPLIB doc sehe ich seinen Teil des LINK-Prozesses. Ich verstehe es immer noch nicht.

Bearbeiten: Ich habe nicht erwähnt, wie die Logger-DLL verwendet werden sollte. Meine Anwendung würde es zur Laufzeit laden (da diese Funktion nur für bestimmte cmd-Zeilenargumente benötigt wird)

    
Raja 27.09.2013, 01:46
quelle

2 Antworten

11

Die DLL enthält den Code. Die .lib-Datei enthält im Grunde Stubs für die Funktionen in der Datei, die es (und relativ schnell) für den Linker erleichtern, die richtigen Informationen in eine ausführbare Datei zu schreiben, um Funktionen in der DLL zu verwenden.

Letztendlich gibt es keinen Grund, warum sie dies tun sollten - es hält den Linker meistens ein wenig einfacher und schneller, weil er (mindestens so viel) speziellen Fallcode nicht benötigt mit statischen und dynamischen Bibliotheken umgehen. Sie könnten das umgehen, indem sie sowohl den Code als auch die Verknüpfungsinformationen in eine einzige Datei schreiben, aber das würde die Dateigröße (ein wenig) erhöhen.

Es bedeutet jetzt wahrscheinlich nicht viel, aber als Windows neu war, wurden noch einige Programme auf 360K-Disketten verteilt, so dass die Minimierung der Größe der an die Benutzer verteilten Dateien als ziemlich wichtig angesehen wurde.

    
Jerry Coffin 27.09.2013, 02:13
quelle
4

Eine exe, die Ihre logger.dll verwendet, muss mit logger.lib verlinken. Ohne die lib kann die exe nicht erstellt werden. Die Lib enthält Stub-Funktionen, die die Aufrufe von Exe-Code erfüllen. (Zur Laufzeit übertragen die Stubs die Aufrufe in die DLL.)

    
ScottMcP-MVP 27.09.2013 03:26
quelle