2011-06-18 5 views
5

私はVisual C++ 2008でDLLを構築していますが、ランタイムをDLLに静的にリンクさせたいと考えています。そこで私はプロジェクトのオプションに入り、ランタイムライブラリをMulti-threaded (/MT)に設定しました。これは過去の他のプロジェクトでは常に有効でした。しかし、私がこれをビルドすると、私はまだMSVCR90.dllをリストに表示するDependency Walkerになります。/MTオプションを設定してもMSVCR90の依存関係が表示されるのはなぜですか?

何が原因なのでしょうか。

+2

明らかに、DLLをロードするEXEは同じオプションでビルドされていません。または、ロードされた別のDLLは、1つしかかかりません。 –

+0

@ハンク:ここには該当しません。私はそれをDependency Walkerで見ています。ツリーの最上位に表示され、別のロードされたDLLの下には表示されません。 –

+1

あなたのDLLは 'MSVCR90'のどのエクスポートに依存していますか? –

答えて

4

プロジェクト+プロパティ、リンカー、コマンドライン。/verboseオプションを追加します。ビルド+リビルド。出力ウィンドウにはシンボルを検索するリンカが表示されます。 msvcrt.libに注意してください。これは、msvcr90.dllへの依存を引き出すものです。

典型的な原因は、/ MDでコンパイルされた.objファイルが1つ以上ある.libをリンクすることです。 msvcrt.libへの依存関係は、#pragma comment(lib、msvcrt.lib)ディレクティブで注入されます。これは、Linker、Input、Additional Dependenciesの依存関係として明示的に指定せずに、msvcrt.libを検索するようリンカーに指示します。

+0

ありがとう、それはまさにそれがそうであることが判明しました。 –

関連する問題