2013-11-26 6 views
11

私は、これは文脈である...リンクするためにいくつかのDLLファイルに追加の.libファイルが必要なのはなぜですか?

をライブラリリンクと.libファイルについて質問があります:

  • OS = Windowsの
  • IDE = QT

私が作成していますDLL:MyLib.dll。私は私のプロジェクトでは、サードパーティのDLLを使用しています

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


は、ヘッダファイルを、ライブラリーへのリンクをパスを含めると使用含めるように私は持っている、私のQTプロジェクトで、そのライブラリを使用するには、第三.dllは
私は上記の例のように同じことを行う場合、それは動作しません:

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

サードパーティのDLLは、私は明らかに一緒に使用する必要があるの.libファイル「third.lib」が付属していますDLLを使用します。

なぜですか?なぜいくつかのDLLライブラリには.libファイルが必要ですが、他のDLLライブラリにはありません。
.libがDLLにアクセスする静的ライブラリである可能性はありますか?

ありがとうございます!

答えて

4

libファイルは、すべてのDLL関数呼び出しが参照されるインポートアドレステーブル(IAT)を最終実行可能ファイルに含めることができるインポートライブラリファイルです。基本的には、関数を参照できるようにする。

あなたはそれについて読むことができますhere。ライブラリを作成する方法について

CONFIG+= staticlib 

Here'sいくつかのドキュメント - :

はQtはLIBを発生させるには、.PROにこれを追加します。

+0

あなたの答えは@ Merlin069です。それを明らかにする!ひとつは、myLib.dllを作成したときに、DLLファイルを含むlibファイルを生成する方法がありませんでした。 DLLをビルドするときにそのオプションがありますか?また、私のDLL内のすべての関数呼び出しも、libファイルなしでアクセス可能であるようです。それは.libファイルが許すべきものではありませんか?ありがとう – WewillSee

+0

デフォルトでインポートライブラリが必要です。 – ExpatEgghead

+0

libファイルを作成していない場合は、libファイルを作成する設定がIDEに設定されている可能性があります。私が理解する限り、libファイルなしでは、dllを別途ロードして関数を呼び出すことができますが、静的ライブラリで実行可能ファイルをビルドする場合はlibが必要です。 – TheDarkKnight

3

私の答えは文脈に固有のものではないかもしれませんが、同じ質問をしている大部分の開発者にとっては役に立ちます。これは、あなたが動的ライブラリを使用するための.libファイルは必要ありませんが、1 せずに、あなたの コードに通常の関数としてDLLから関数を扱うことができませんアンソニー・ウィリアムズによって

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

に答えました。 。代わりにDLLをロードするLoadLibraryを手動で呼び出す必要があります(完了したら FreeLibrary)GetProcAddressを使用して、DLLの関数またはデータ項目の アドレスを取得する必要があります。返されたアドレスを にキャストして、 を使用するには、適切な関数へのポインタにキャストする必要があります。

関連する問題