1. ホーム
  2. c

.expの用途と.libと.dllの違いは何ですか?

2023-07-16 01:02:27

質問

コンパイルおよびリンク時に、.exp はどのように使用されるのですか?.libと.dllの違いは何ですか?私は、リンクしている間、.libが使用され、プログラムを実行するとき、.dllが使用されることを知っています。しかし、.libと.dllの違いは正確には何ですか?

.lib ファイルは .dll ファイルから来る関数のコードを含んでいないのですか。 2 つの別々のファイルを使用する必要性は何ですか?

明確にしてください。

どのように解決するのですか?

DLL のインポートライブラリの場合、.lib ファイルでは ではなく には実際のコードはまったく含まれていません。基本的には、関連する DLL の関数のリストが含まれているだけで、リンカーがその DLL への参照をライブラリとリンクされたものに埋め込むには十分ですが、それ以外にはあまりありません。

.exp ファイルはエクスポートファイルで、基本的には .lib ファイルとほぼ同じです。これは、循環依存関係がある場合に (少なくとも主に) 使用されます。たとえば、ある実行ファイルのプラグインとして動作する DLL があるとします。実行ファイルはプラグイン DLL が使用するためにエクスポートされた関数を提供しますが、プラグイン内のいくつかの関数も呼び出すことができる必要があります (たとえば、プラグインをロードして初期化する場合など)。

DLL は、実行ファイルが .lib ファイルを提供するためにビルドされるまでリンクされません --。依存関係を解消するために、実行ファイルに対してリンカーを実行すると、(DLL 用の .lib ファイルが見つからないため)失敗しますが は .exp ファイルを生成します。次に、実行ファイル用の .exp ファイルに対して DLL をリンクします。その後、DLL 用の .lib ファイルを使用して、実行可能ファイルを作成するためにリンクを再実行できます。