2013-11-26 6 views
11

Ich habe eine Frage zu Bibliothek Verknüpfung und LIB-Dateien ...Warum benötigen einige DLL-Dateien eine zusätzliche .lib-Datei zum Verknüpfen?

dies ist der Kontext:

  • OS = Windows-
  • IDE = QT

ich erstellt habe DLL: MyLib.dll.
Um diese Bibliothek in meinem QT-Projekt zu verwenden, muss ich nur ein Pfad enthalten sind, einen Link zu der Bibliothek und verwenden Sie die Header-Dateien:

LIBS += "C:\myPath\MyLib.dll" 
INCLUDEPATH += "C:\myPath" 
HEADERS += \ 
    ../myPath/MyLib_global.h \ 
    ../myPath/mylib.h 

ich einen Dritten DLL in meinem Projekt bin mit: dritten .dll
Wenn ich die gleichen wie im obigen Beispiel zu tun, funktioniert es nicht:

LIBS += "C:\myPath\third.dll" 

der dritte Partei DLL kommt mit einer LIB-Datei „third.lib“, die ich brauche, um scheinbar zusammen zu verwenden mit der DLL.

Warum ist das? Warum benötigen einige DLL-Bibliotheken eine .lib-Datei, andere DLL-Bibliotheken nicht?
Könnte es sein, dass die .lib eine statische Bibliothek ist, die auf die DLL zugreift?

Vielen Dank!

Antwort

4

Die lib-Datei ist eine Importbibliotheksdatei, die es der endgültigen ausführbaren Datei ermöglicht, eine Importadressentabelle (IAT) zu enthalten, mit der auf alle DLL-Funktionsaufrufe verwiesen wird. Grundsätzlich können die Funktionen nachgeschlagen werden.

Sie können darüber lesen here.

haben Qt die lib erzeugen, fügen Sie diese in die .pro: -

CONFIG+= staticlib 

Here's einige Dokumentation, wie Bibliotheken zu erstellen.

+0

danke @ Merlin069 für Ihre Antwort. das verdeutlicht es! Eine Sache: Als ich myLib.dll erstellte, sah ich keine Möglichkeit, eine lib-Datei mit der DLL-Datei zu erzeugen. ist das eine Option beim Erstellen der DLL? Auch scheinen alle Funktionsaufrufe in meiner DLL ohne die lib-Datei zugänglich zu sein. Ist das nicht, was die .lib-Datei erlauben soll? Danke – WewillSee

+0

Es sollte standardmäßig eine Import-Bibliothek sein. – ExpatEgghead

+0

Es gibt wahrscheinlich eine Einstellung in Ihrer IDE, um die lib-Datei zu erstellen, wenn sie noch keine generiert. Soweit ich es verstehe, können Sie ohne die lib-Datei die DLL separat laden und Funktionen aufrufen, aber die lib ist erforderlich, wenn Sie eine ausführbare Datei mit statischen Bibliotheken erstellen möchten. – TheDarkKnight

3

Meine Antwort ist möglicherweise nicht kontextspezifisch, aber für die meisten Entwickler, die dieselbe Frage stellen, nützlich. Dies wurde beantwortet von Anthony Williams

What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?

Sie haben nicht eine LIB-Datei benötigen eine dynamische Bibliothek zu benutzen, aber ohne eine kann man nicht behandeln Funktionen aus der DLL als normale Funktionen in Ihrem Code . Stattdessen müssen Sie LoadLibrary manuell aufrufen, um die DLL zu laden (und FreeLibrary, wenn Sie fertig sind), und GetProcAddress, um die Adresse der Funktion oder des Datenelements in der DLL zu erhalten. Sie müssen dann die zurückgegebene Adresse in einen entsprechenden Zeiger-auf-Funktion umwandeln, um verwenden zu können.

Verwandte Themen