17

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

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

ジェラルド

4

11 に答える 11

9

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

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

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

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

そしてもう1つ:

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

最後のものを確認する:

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

于 2008-10-20T15:16:52.917 に答える
5

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

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

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

于 2009-03-29T02:13:29.770 に答える
3

別のVC9.0プロジェクトがうまくいきましたが、同じ問題がありました。そこで、両方のプロジェクト設定を比較しました。決定的な違いは、'Project Properties' -> 'Configuration Properties' -> 'Manifest Tool' -> 'Input and Output' -> 'Embed Manifest' の下にありました。このオプションは YES に設定する必要があります。

于 2010-01-13T16:18:31.300 に答える
2

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

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

于 2008-10-21T09:05:02.170 に答える
1

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

  1. プロジェクトを選択し、右クリックしてプロパティ ページを開きます。
  2. [構成プロパティ] を選択します。
  3. ツリー リストから C/C++ を選択します。
  4. コード生成を選択します。
  5. 左側のプロパティ リストを見て、Runtime Libraryプロパティを確認します。
  6. マルチスレッド DLL ではなく、マルチスレッド デバッグを選択します。

これを行うと、プロジェクトに依存する dll が埋め込まれ、依存関係の問題が回避されます。

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

于 2014-08-05T06:47:26.830 に答える
1

関数 File->New->Project From Existing Code を使用して、VC++ 2008 でプロジェクトを再コンパイルします。それは私自身を助けました、おそらくそれはあなたを助けるでしょう。よろしく。

于 2010-07-11T08:09:57.837 に答える
0

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

于 2008-10-20T15:22:31.580 に答える
0

提案されたすべての解決策を試してみましたが、運がありませんでした。最終的に、マニフェストが"C:\WINDOWS\WinSxS\Manifests"フォルダーにないことがわかりました。

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

"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"

于 2010-07-01T13:00:11.733 に答える
0

問題がありました:

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

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

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

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

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

于 2009-09-22T00:03:33.270 に答える
0

決定的な解決策を示すことはできませんが、役立つリンクがいくつかあります。

もちろん、リンクをたどれば、MSDN にはさらに多くの情報があります。

于 2009-07-19T18:29:59.247 に答える
0

同様の問題に直面しましたが、説明されている解決策はどれもうまくいきませんでした。

最後に、問題を解決するために次のことを行いました。

ステップ-1: @ user176861 の提案に従ってください

ステップ-2: VC++ プロジェクトのプロパティ -> 構成プロパティ -> リンカー -> マニフェスト ファイル: 「追加のマニフェストの依存関係」に以下を追加します。

type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'

上記の変更を行った後、デバッグできました。

于 2021-03-02T13:01:45.197 に答える