2014-01-13 4 views
5

私は以下の問題があります:Microsoft Visual Studio 2012を使用し、msvcp110.dllをリリースに追加します。私はここでいくつかの記事を読んだことがあります。私はiostreamとstringの両方を使用し、それを自分のプログラムにリンクしていることが原因であることを知っています。私はこれを私のPCで使っても問題ありませんが、私は他の人にそれを見せたいと思います。だから、私の質問は、できるだけ他の人にとって痛みを伴わずに、問題を回避していくことができ、基本的なスタンダードをいくつか使うことです。私は他の人がVisual Studio Runtimeのものをインストールすることができることを知っていますが、それは痛いものです。msvcp110.dll、どうすれば回避できますか?

+1

それとも、静的リンクを使用することができます。 – user2802841

答えて

8

アプリケーションをdynamically-linkedのままにする場合は、エンドユーザーはVisual C++ Redistributable for Visual Studio 2012をインストールする必要があります。

これは次の理由でアプリケーションを提供するための望ましい方法です:。

  1. バイナリサイズ - ライブラリ関数がリンクされていないので、あなたのアプリケーションのバイナリが小さくなります
  2. セキュリティ - Microsoftの再頒布可能なDLLは、Windows Updateによって更新することができます。ライブラリの1つに脆弱性が見つかった場合、その脆弱性が修正され、動的にリンクされたすべてのプログラムがすぐに脆弱にならなくなります。
  3. メモリフットプリント - 複数のプロセスがすべて同じDLLを使用している場合は、一度だけ(読み込み専用)メモリにロードする必要があります。すべてのプロセスはDLLのテキストのコピーをメモリに共有し、プロセスの全体的なメモリ使用量を削減します。

また、あなたはあなたの実行可能ファイルをstatically linkことができます。これを行うには、Visual Studioでプログラムのビルドオプションを変更します。 Visual Studioの2010年に

が、これは>C/C++>コード生成>ランタイムライブラリ構成プロパティの下にあります。

enter image description here

デフォルト(/MD//MDd)自分のランタイムDLLにリンクするためにVSを伝えます。静的にリンクするには

、あなたは正しいデバッグ/非デバッグバージョン(スイッチで少しd)を選択してください(/MT//MTd)非DLLのオプションのいずれかに変更します。


も参照してください:

+0

答えをありがとう!私は、エンドユーザがこれをもっと速くする必要があることを知っていますが、これは現時点では小さなプログラムであり、ほんの数人に送信したいだけです。しかし、問題に戻る - 私はスクリーンショットのオプションを選択したが、それでも動作していない。私は何か見落としてますか?ここに私の[コード生成ウィンドウ](http://i.imgur.com/byqKHC5.png)があります。 –

+0

変更しましたか?まだDLLに設定されています。'Multi-threaded(/ MT)'が必要です。私は自分の答えを書き直すつもりです。 –

+0

ああ、わかりました - 混乱しました。私はそれが明日に働くかどうかチェックします、今私は寝る時間です。手伝ってくれてありがとう! –

関連する問題