6

Visual Studio 2013 でコンパイルしたプログラムを実行しようとしていますが、エラーが発生します。

The program can't start because MSVCP110D.dll is missing from
your computer. Try reinstalling the program to fix this problem.

これはあまり役に立たないエラーです。ただし、グーグルで調べたところ、(明らかに)標準c++ライブラリを動的にロードしようとしていることがわかりました。これを回避するには、/MTオプションではなくオプションを指定する必要があり/MDます。これにより、いくつかの質問が残ります。

  1. それは正確に何をしているのですか?
  2. /MDとは対照的に、 の利点は何/MTですか? つまり、それがデフォルトのオプションである理由があるに違いありません...
  3. .dll検索を取得し、Visual Studio でそれを使用するにはどうすればよいですか? これをダウンロードしたのですが、正直使い方がよくわかりません。
  4. 最も重要なのは、そのエラーを解消してプログラムを実行するにはどうすればよいですか?

追加情報:ビルドReleaseを使用してモードでコンパイルしています。x64

4

1 に答える 1

14

問題は、異なるコンパイラを使用してコンパイルされた Qt を使用して、異なるバージョンの Visual Studio を混在させていることです。Visual Studio の各バージョンには独自のランタイム/CRT があることに注意してください。Visual Studio 2012 でコンパイルされ、Visual Studio 2012 ランタイムに依存する Qt dll。2013 ランタイムは使用しません。

この問題の解決策は、すべてのコードと依存ライブラリ/dll を同じコンパイラで再コンパイルすることです。

警告: 他のバージョンの Visual Studio から動的ランタイムをインストール (または静的 CRT で依存ライブラリを再コンパイル) しようとするユーザーもいますが、これは主に各ランタイムに独自の独立したヒープがあるため、この問題の解決策ではありません。別々のヒープを使用すると、メモリを 1 つのヒープに割り当ててから別のヒープで解放しようとすることにより、ランダムなクラッシュが発生する可能性があります。ヒープは割り当てまたは割り当て解除に関する情報を共有しないため、ヒープの破損につながります。私の経験からすると、この問題が常に即時のクラッシュを引き起こすとは限りません。クラッシュは、破損したヒープの次の割り当てで発生する場合と発生しない場合があるため、この状況のデバッグは非常にイライラする可能性があります。

于 2013-11-08T13:46:48.467 に答える