2017-01-23 13 views
2

スタンドアロンのexeを作成するようにプログラムをコンパイルしようとしています。 実際に私は2つの問題があります:スタティックリンクでコンパイルVS2015

プロパティ - > C/C++ - >コード生成 - >ランタイムライブラリに行き、マルチスレッド(/ MT)に変更しました。

この後、.exeのサイズが増えましたが、別のコンピュータでこのファイルを使用しようとすると「このプログラムを実行できません:msvcp140d.dllという名前のDLLが必要です」

これは2つの問題ですが、なぜ私はリリース版をコンパイルしているので、DLLのデバッグ版を使用するように頼んでいるのか理解できません。彼らは静的にリンクされています/:

PS:私はOpenCV3.0プロジェクトをコンパイルしようとしています。/

編集:1つの問題が解決されました:私はMSVCP140d.dllを使用して自分のプログラムを作成するリリースリンカーでopencv_imgproc310d.dllを使用していました。 今、私はまだexeがスタンドアロンではないという問題があります。それは動作するにはDLLが必要です。 (私は私のVSをアップアップしたので、私は最新版を持っています)。 ありがとう

+0

私が知っている限り、マルチスレッドを使用していても、静的ランタイムを使用しているわけではありません。それは別のものです。 –

+0

http://stackoverflow.com/questions/20890458/compile-c-in-vs-without-requiring-msvcp120d-dll-at-runtime この投稿でこの解決策を見ました:/ –

答えて

0

/MTdフラグを使用する場合は、外部の依存関係(Microsoft dllファイルなど)は必要ないことは間違いありません。しかし、実行可能ファイルのフラグサイズが大きくなる(バイナリコードが多くなるため)。

あなたの問題は、「このプログラムを実行することはできません、あなたは名前のDLLが必要ですmsvcp140d.dllは、」あなたは、両方の構成のためのランタイムライブラリを設定していなかったためである。

  • デバッグ:あなたはマルチを設定する必要があります-threadedデバッグ(/ MTdに)フラグ
  • リリース:あなたが設定する必要がありマルチスレッド(/ MT)フラグが

の両方を設定してください、そうでない場合は一つだけ設定が実行されます。

+0

あなたの言ったとおりです。私は両方を修正しましたが、結果は同じです。 exeファイルを実行できません。エラーメッセージが引き続き表示されます。そして、それは私のコンピュータ上の... d.dllを持っていないと言います(もう一度、私はリリース版を構築し、デバッグDLLを私に尋ねるので奇妙です.../ –

+0

あなたは複数のプロジェクトを持っていますか?もしそうなら、それらを適切に設定しましたか? – fr3nzy90

+0

私はプロジェクトが1つしかありません。私は彼を適切に設定したと思う。 –

関連する問題