3

Visual Studio 2010では、別のdllを使用するダイナミックライブラリ(たとえば、dyn1.dll)としてプロジェクトをビルドしました(たとえば、dyn2.lib、dyn2.dll、dyn2.hはそれぞれのファイルです)。dyn2.hとdyn2.libをプロジェクトに直接含めます。そして、dyn2.dllが存在する場所を指すように「path」変数を設定します。これは、dyn1.dllを機能させるために従う手順です。

ここで、dyn2.dll、dyn2.h、dyn2.libを使用しながら、プロジェクトを静的ライブラリ(sta1.libなど)としてビルドするとします。sta1.libに組み込まれているdyn2.lib、dyn2.dllに含まれているすべてのコードです。

意味はsta.libスタンドアロンです。sta1.libが機能するために、パス変数内のdyn2.dllのディレクトリを指す必要はありませんか?私はこれらに慣れていないので、明確な答えが非常に役立ちます

ありがとう

4

1 に答える 1

3

簡単な答えはノーです。dyn2.dllのコードは、静的dyn1.lib(sta1。lib)に含まれていません。実際、dyn2.libを、静的sta1.libを使用するプロジェクトにリンクする必要があります。そうしないと、未解決のリンカーエラーが発生します。

これは、静的ライブラリがdyn2.dllのコードを参照していないということではありません。です。ただし、静的ライブラリであるため、PEモジュールはありません。これは、外部参照を持つ.objコードモジュールの単なるコレクションです。(dyn2.dllへの)これらの外部参照は、静的ライブラリのコードを使用する人が解決する必要があります。静的ライブラリは、dyn2.dllへのコード参照を使用します。静的ライブラリには「リンク時」の解決策はありません。これは、最終的なPE(DLLまたはEXE)をリンクする場合にのみ発生します。物事はまだ最終的なリンクで修正する必要があります。

したがって、2番目の質問に答えます。どちらの場合(静的または動的)でも、最終的な実行可能ファイルは、どこにいてもdyn2.dllへのロードアクセス権を持っている必要があります。さらに、dyn1.dllが以前に持っていたのと同じように、dyn2.dllインポートライブラリ(dyn2.lib)ともリンクする必要があります。

于 2012-11-07T19:08:25.760 に答える