web-dev-qa-db-ja.com

Visual C ++ 2008のデバッグモードでMSVCR90D.dllが見つかりません

Visual C++ 2008に問題があります。opencvをインストールし、新しいプログラムを作成しましたが、エラーなしでビルドしました。ただし、デバッグ時にMSVCR90D.dllが見つからないという文句があります。リリースモードでは、まったく問題はありません。

Winsxsフォルダーの1つにMSVCR90D.dllがあります。誰かがこの問題の回避策を知っていますか?これは既知のバグですか?

ジェラール

17
Gerard

これで説明されているいくつかの潜在的な解決策があります フォーラム投稿 。それらのいずれかが役立つかどうかを確認してください。

そこからの1つのヒント:

%System Drive%\ Windows\WinSxSに移動し、ディレクトリx86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456を探します。

これが存在しない場合は、VSセットアップに移動し、すべてのライブラリがVC++でインストールされていることを確認してください。

そしてもう1つ:

同じ問題が発生しましたが、インクリメンタルリンクをオフにすることで修正しました(プロジェクトプロパティ...リンカー...一般...インクリメンタルリンクを有効にする:いいえ)。

最後のものを確認する:

ソフトウェアにマウントされたドライブ上に構築されたプロジェクトは、MSVCR90D.dllの欠落について不平を言います。インクリメンタルリンクをオフにすると(もちろん、すべてを再構築すると)、問題は解決します。

9
Jorge Ferreira

同じ問題が発生しているので、VS9.0インストールのデバッグDLLにつながる投稿を見つけました。デフォルトのインストールの場合、それらはC:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRTにありました。

3つのDLLとマニフェストファイルがあります。これらをSystem32ディレクトリに追加したり、ディレクトリをPATH環境変数に追加したり、デバッグ時に実行可能ファイルと同じディレクトリにファイルをコピーしたりできます。

インクリメンタルリンクはビルドを高速化します(リンカーは、プロジェクト全体を再リンクするのではなく、変更されたライブラリのみを再リンクします)。それ以外の場合、ビルド出力には影響しません。大規模なプロジェクトの場合、インクリメンタルリンクをオフにすることはお勧めしません。

5
x_x

別のVC9.0プロジェクトはうまくいきましたが、同じ問題がありました。そこで、両方のプロジェクト設定を比較しました。重要な違いは、「プロジェクトのプロパティ」->「構成のプロパティ」->「マニフェストツール」->「入力と出力」->「埋め込みマニフェスト」の下にありました。このオプションはYESに設定する必要があります。

3
Markus

トラブルシューティングDLL Dependency Walkerを使用すると、問題がはるかに簡単になります。起動時にロードされたDLLと後でロードされたDLLの両方をキャッチして、アプリケーションのプロファイルを作成できます。これにより、 DLLのロード、またはそれらのロードの失敗。DLLのSxSロードも理解します。

EXEを引数としてDepends.EXEに渡すと、そのアプリのプロファイルが作成されます。これは、ほとんどのIDEと組み合わせることができます。たとえば、Visual Studioでは、「デバッグ用コマンド」を設定できます。デフォルトでは、これは独自のEXEです。これをdepends.EXEに変更し、コマンド引数を(少なくとも)/pb your.debug.exeに設定します。

2
MSalters

関数[ファイル]-> [新規]-> [既存のコードからのプロジェクト]を使用して、VC++ 2008でプロジェクトを再コンパイルします。それは私自身を助けました、おそらくそれはあなたを助けるでしょう。よろしく。

1
user388764

私は以下のような同じ問題を解決しました:

  1. プロジェクトを選択し、右クリックしてプロパティページを開きます。
  2. [構成のプロパティ]を選択します。
  3. ツリーリストからC/C++を選択します。
  4. [コード生成]を選択します。
  5. 左側のプロパティリストを見て、ランタイムライブラリプロパティを確認してください。
  6. マルチスレッドDLLをオフにする代わりに、マルチスレッドデバッグを選択します。

これを行うと、プロジェクトは依存するdllを埋め込むため、依存関係の問題を回避できます。

注:私はdllプロジェクトに取り組んでいて、その問題がありました。上記の手順を実行した後、それは私の状況で機能しました。

1
Mustafa Kemal

私は決定的な解決策を与えることはできませんが、ここにいくつかの役立つリンクがあります:

そしてもちろん、リンクをたどれば、MSDNにはもっとたくさんのことがあります。

0
Adam Rosenfield

私は問題を抱えていました:

ファイルまたはアセンブリ 'AudioInterface、Version = 1.0.3548.29920、Culture = neutral、PublicKeyToken = null'またはその依存関係の1つを読み込めませんでした。アプリケーションの構成が正しくないため、このアプリケーションを起動できませんでした。アプリケーションを再インストールすると、この問題が解決する場合があります。 (HRESULTからの例外:0x800736B1)

AudioInterfaceは私のC++プロジェクトの名前でした。

「リリース」構成に切り替えると、すべてが機能しました。

DLLと一緒にマニフェストファイルがないことを追跡し、さらにアセンブリIDが設定されていることを追跡しました。 ([プロパティ]> [マニフェストツール]> [一般]> [アセンブリID])

この設定を削除すると、マニフェストが適切な場所にドロップされ、すべてが機能しました。

0
user176861

これが、私が静的にリンクする理由の1つです。より大きなEXEですが、これまでにこのような依存関係の問題が発生したことはありません。おそらくそれ自体で質問する価値があります...

0
Rob

私は運が悪かったので、提案されたすべての解決策を試しました。ついに、マニフェストが"C:\WINDOWS\WinSxS\Manifests"フォルダーにないことがわかりました。

C:\WINDOWS\WinSxSでdllが配置されているフォルダを見つけます。 C:\WINDOWS\WinSxS\Manifestsにdllのフォルダ名と一致するマニフェストがあるかどうかを確認します。マニフェストがない場合は、別のマシンから正しいマニフェストをコピーして、マニフェストフォルダーに貼り付けます。マニフェストファイル名は次のとおりです。

"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.cat"

"x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.manifest"

0
opie