2009-10-17 23 views
9

Visual Studio 2008でCGIアプリケーションを作成してローカルにデイブしたので、すぐに実行できなかったWindows Server 2003 OSにアップロードしました。ランタイム再配布可能なC++バイナリを再配布可能(Server2k3、XPSP3)

私は惨めなランタイム配布をインストールする必要が推測していますが、これ読んだ後:それはサイドのものだけを再書き込みすることで、この辺を無視する方が理にかなっている場合

http://kobyk.wordpress.com/2007/07/20/dynamically-linking-with-msvcrtdll-using-visual-c-2005/

を私は疑問に思ってアプリ。

私はWindows Server 2003に必要なMSCRVTバージョンがないと推測していますか? Windows Server 2003にはそれがありますか?

シッククライアントをデプロイする場合は、必要なDLLをアプリケーションに配布したいと考えています。 iostream、sstream、stringを除いて何を仮定していますか?

windows.hを追加すると大幅に変更されますか?

を追加しました:

C/C++の下に推奨/ MTスイッチ使用

- >コード生成 - >ランタイムライブラリ - >マルチスレッド(/ MT)

を(おそらく必要があります。エラーメッセージ

を避けるために>クリーン

-

ビルド:クリーンを行うには

"更新されたマニフェストをファイルに保存できませんでした")

私のアプリは38kから573kに膨らんでいます。それは私が大事に呼ぶものです(あなたの給料であれば想像してください)。このアプリの多くのインスタンスは常にロードされ、アンロードされるため(貴重なメモリとプロセッサリソースが必要です)、私はより良い(より小さい)ソリューションを探したいと思います。

これは今日の多くの状況では重要ではなく、多くの開発者の関心事ではないことを理解しています.NOTと60MBランタイムの傾向ですが、これは私がしたいことです。 ;

- > Propeties - > C/C++ - - >プリプロセッサ>プリプロセッサの定義(DEBUGを削除)

プロジェクト:コンパイルするためのプロジェクトを取得するためのデバッグを除去した後

を追加しましたサイズは300kに縮小され、実行されます。

を追加しました: 以下のクリス・ベッケによって示唆されるように、コピー: msvcm90.dll msvcp90.dll msvcr90.dll Microsoft.VC90.CRT.manifest アプリケーションのディレクトリには、必要なすべてのランタイムを提供します。

Visual Studio 6を使用するのは数回お勧めしますが、Vista(またはWindows 7と仮定しています)をサポートしていません。ランタイムを必要としないその他のソリューションはおそらくMASMでも基本的な味です。残念ながら、これはC++のような高水準のOOP言語を使用する目的に反するものです。

C++再配布可能ファイルをインストールする必要がある限り、トレードオフはさらに260kです。ザッツ許容

+0

*何が大きく変わるのですか? VS2008で構築するほとんどすべてのものは、ほとんどがランタイムインストールを必要とします。 – Joe

+0

あなたは、ほとんど何があってもランタイムを必要とします。あなたの選択はあなたがそれをどのように*含むかにあります。最も便利な方法は、静的にリンクされたバージョンを使用することです。次に、別のdllをまったく配布する必要はありません。それに失敗した場合、dllを配布するには50万の方法があります。 15ページのドキュメントを読む必要がある、非常に複雑なサイドバイサイドのものから、アプリケーションのルートフォルダに適切な名前のフォルダに入れるだけです。これはかなり扱いやすいものです。 – jalf

+0

これはどれくらい効果があるのか​​よく分かりませんが、コンパイラ/リンカのオプションを試してみてください。実行可能ファイルのサイズに影響を与えるものがいくつかありました(サイズの最適化と未使用のものの削除に関するもの)。 –

答えて

6

オプションの充実リスト:それはまったくのC/C++の使用状況をtheresのよう

    アプリを書き換え
  • Visual Studio 6またはCode :: Blocksのようなmingwベースのツールセットに切り替えます。これらのツールバーでは、すでに配布されているmsvcrt.dllがランタイムとして使用されます。
  • /MTスイッチを使用してビルドします。これはあなたのexeに必要なランタイム関数を構築します。それはそれを膨らませるでしょう。しかし、その膨張(率直に言って)は、別々のdllをロードするよりもオーバーヘッドが少なくなります。
  • VS9ランタイムを「プライベートsxs」インストールとして配布します。これには、C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRTの内容をアプリケーションのexeと同じフォルダにコピーする必要があります。 SP1を適用した場合、このフォルダにはSP1ランタイムが含まれますが、アプリケーションはRTMランタイムを要求します(図参照)。あなたのプロジェクト定義に_BIND_TO_CURRENT_CRT_VERSIONを追加し、再構築してください。
  • 明らかにvc_redist.exeがVS9用に取得できます。上記のアセンブリ(Microsoft.VC90.CRTの内容である)を実際に共有sxsストアにインストールするために必要なMSIまたはインストーラmojoを見つけてください。
+0

VS9ランタイムの作業を配布します。上記の議論を参照してください –

9

は私が私の答えを修正してみましょう:

あなたは、いくつかのオプションがあります。

1)VC++ 2008ランタイムをインストールします。あなたはdownloadとそれらのためのインストーラできます。それらのマージモジュールも利用できます。

2)実行時に静的にリンクする(/ MTまたはC/C++→コード生成 - >ランタイムライブラリ:マルチスレッド)。これは、実行可能ファイルのサイズが増加しますが、任意のDLLに依存しません。サイズが気になる場合は、C標準ライブラリのみを使用するか、Windows APIを直接使用してください。

3)古いバージョンのVC++を使用してください。 2005年以前のバージョンでは、ランタイムのインストールは必要ありませんでした。 Dllは、実行可能ファイルと同じディレクトリに置くことができます。 VC++ 6.0を使用する場合、ランタイムはすべてのバージョンのWindowsにインストールされます。そうでなければ、あなた自身でインストールする必要があります。

+0

私はあなたが意味すると思います プロジェクトのプロパティ - > C/C++ - >コード生成 - > RUntimeライブラリ - >マルチスレッド(/ MT) –

+0

コーダーまたはコード?あなたはおそらく正しいです、私は記憶からそれをやろうとしました。 –

関連する問題