2016-08-23 10 views
2

私はVS2008を使用してアプリケーションのデバッグバージョンを作成しています。 コンパイル後、アプリケーションを実行しようとすると、有名な「MSVCR90.dllが見つかりません」というエラーが表示されます。C++アプリケーション(デバッグバージョン)にはVSランタイムライブラリが含まれていますmsvcr90.dllとmsvcr90d.dll

は当初、私は最後に私がしようとしたアプリケーションフォルダにフォルダが、私はまだ別の有名なエラー「アプリケーションが誤ってCランタイムライブラリをロードしようとする試みを行っている」取得winsxsからMSVCR90.dllをコピーする

を試してみましたアプリケーションの依存関係を調べると、私には何か奇妙なことが明らかになりました。 msvcr90d.dllとmsvcr90.dllという2つのアプリケーションに依存するMSVCR90ライブラリがありました。私はこのライブラリの非デバッグバージョンが私のアプリケーションにどのように入っているのかは分かりません。

私は間違っている可能性があります。前もって感謝します。ここで

は絵です:

image

dependency walker - no functions visible

+0

を使用することができますあなたのアプリケーションからインポートされた機能かを確認する依存関係ウォーカーを使用することができます'msvcr90.dll' – Ari0nhh

+2

推測:あなたはリリースモードで構築された外部ライブラリとリンクしています。 –

+1

_ winsxsフォルダからMSVCR90.dllをアプリケーションフォルダにコピーしようとしました。 - これを行わないでください。通常、インストーラを使用してランタイムをインストールする方が良いでしょう。 _アプリケーションに依存する2つのMSVCR90ライブラリ - msvcr90d.dllとmsvcr90.dll_ - 誰か(あなたまたは静的ライブラリ)が、ランタイムのリリースバージョンに対して何かを構築しました。あなたはそれを見つけるためにすべての図書館とプロジェクトを実行する必要があります。実行時に不一致の原因を診断するのに十分な詳細がありません。 – Niall

答えて

3

私は答えを見つけました!

/VERBOSE:LIB linkerフラグを使用して、リンクのどの部分がアプリケーションにMSVCR90.dll(リリース)ライブラリを追加しているかを調べました。

はその後、ライブラリのMSVCRT.LIB(リリース)バージョンを避け、リンク時に「は、紛争」を強制しないようにLIBS/exeファイルのに/NODEFAULTLIB:MSVCRT.libリンカフラグを使用していました。これにより、実行可能ファイル/ライブラリ内のMSVCRTのライブラリ参照の2つのバージョンが回避されます。

注:アプリケーションでMSVCRTのデバッグバージョンを避けたい場合は、あなたが/NODEFAULTLIB:MSVCRTD.lib

関連する問題