2013-09-03 4 views
15

vs2012のvcredistとvs2010のvcredistの両方をインストールする必要がありますか?プログラムの実行に必要なC++の再配布可能ファイルを特定するにはどうすればよいですか?

私のアプリが.dllを読み込めないというエラーが発生しました。無関係なインストールを行った後に突然動作を開始しました。問題を修正した古いvcredistがインストールされているはずです。 しかし、私はC++ 11の機能を使用していると確信しています。

+4

[依存](http://www.dependencywalker.com)を使用してください。 –

+0

は、110.dllが不足していることについてのみ教えてくれます。私は、奇妙なことを知っている。しかし、それはしました。 – Blub

+3

これは、プログラムが別のVisual Studioバージョンで構築されたサードパーティのライブラリに依存している場合に発生します。 –

答えて

12

展開は単独の仕事です。そして、私はそれが嫌い、あなたはWindowsにインストールを書く方法が嫌いです。 ...今は気分が良くなるので...

vcredistは1つだけ必要です。リンカーがあなたのプログラムをリンクさせることを決めたもの。あなたは、「WindowsのSDKの」インストールされている場合は、実際の再頒布を見つける:あなたは重要でないものも含め、すべての更新プログラムをインストールした場合

C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\vcredist_x86 

、Microsoftがそのフォルダに再頒布を更新します!

おそらくあなたは実行したくない実行可能ファイルを持っているかもしれません。dependency walkerが必要です。 MicrosoftがVisual Studioから削除する必要があったので便利です。プログラムをダウンロードし、あなたのexeファイルを開きます。実際に何が起こるかを理解する必要はありません。開いている間にダイアログが表示されない限り、下のウィンドウに感嘆符が表示されていてもすべてが問題ありません。ダイアログが "解決できませんでした"のようなものが表示された場合は、下部のウィンドウを見てください。通常、下部ウィンドウには、 "msvcr.dll"または "msvcr100.dll"または "msvcr110.dll"のようなものがあります。 "msvcr100d.dll"のような拡張子の前に "d"が含まれていれば、実行可能ファイルはデバッグモードでコンパイルされ、コンパイラがインストールされていないシステム上で終了します。そうでない場合、名前はあなたが必要とするvcredistいるあなたを語っている:

msvcr100 = VS 2010再頒布可能(32bit)(64bit)

msvcr110 = VS 2012再頒布可能(32/64bit?)

が、時にはそれがmsvcrはありませんが、それは常にミリ秒「で始まります"もちろん、プログラムは、あなたが欠落しているすべてのdllを教えてくれるでしょう。マイクロソフトだけでなく、dllのどのコマンドが使われているのでしょうか?これは時には非常に便利です。 実行可能ファイルのフォルダー内のすべてのdllには、解決不可能な依存関係がある可能性があるので、これを行う必要があります。
最初の質問に戻る。あなたのプログラムは、msvcr100またはmsvcr110にのみリンクすることができ、両方にリンクすることはできません。つまり、実行可能ファイルごとに1つのvcredistが必要です。 注釈に記載されているように、サードパーティのDLLは、別のmsvcpバージョンを使用していると罪悪感を持つ可能性があります。だから、ええ、あなたが使用するすべてのDLLを検索する必要があり、あなたは両方のvcredistをいくつかインストールする必要があります。

PS:常に少なくとも2つ、msvcrとmsvcpがあります。

+2

プログラムがmsvcrtのバージョンXにリンクしているサードパーティのDLLを使用することはできませんし、プログラム(exe)自体がmsvcrtのバージョンYにリンクしていますか?この場合、プログラムを起動するには、両方の再配布可能ファイルが必要です。 –

+0

バム、そうです!私はそれを変える。 –

+0

Martinまず、プログラムは1つのプログラムにしかリンクできないと言いますが、サードパーティ製のDLLは両方を持つ必要があると言います。一方では1つしか必要ではない可能性がありますが、他方では両方ともそこにいる必要があることは私には分かりません。また、C:¥Program Files(x86)¥[etc ..]にいくつかのSDKがインストールされていますが、2つのことがあります。まず、7.0AだけにBootstrapper \ packagesフォルダがあり、唯一のvs2010 vcredistです。したがって、C++ 11の機能を使用しているため、十分ではありません。 – Blub

2

ご使用のOSがVista(XPではなく)の場合は、組み込みのSxStrace.exeを使用して、ロードされているDLLとそのモジュールが必要とするログを生成します。これは、複数のCRT DLLのバージョンがロードされている場合と、どのDLL(サードパーティーまたはノー)のために表示されます。

VS2012は、再配布可能です。 "C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ redist"を選択します。

- (Windows 7で)次のようにデビッド

5

私はこの問題を解決:

  1. を私はライブラリをロードしようとしましたが、それはアプリケーションが側でその辺ため、起動に失敗しました」表示に失敗しました情報が間違っています。
  2. 「コンピュータ管理」ウィンドウを開きました。スタート - >コンピュータ - >管理を右クリックします。
  3. "コンピュータ管理"ウィンドウで "イベントビューア" - > "Windowsログ" - > "アプリケーション"を選択しました。
  4. エラーに対応するログには、Microsoft.VC90.CRTの特定のバージョンのDLLが見つかりませんでした。私の場合、バージョンは9.0.30729.6161であり、Googleの検索では、hereから再配布可能ファイルの「珍しい」バージョンをインストールする必要があることが明らかになりました。

依存関係ウォーカーは私にとって助けになりませんでした(不要な依存関係を報告することで私を混乱させました)。

関連する問題