2016-11-07 10 views
0

MSVC++は、単一の実行可能ファイルのみを展開するプログラマのための最適化を提供します。/MTでビルドすると、C++ランタイムライブラリと標準C++ライブラリをEXEにリンクできます。または/ MDを使用してC++ランタイムライブラリ(.DLLファイル)を呼び出します。1つの実行可能ファイルのみを展開する方法

しかし、独自のコードやサードパーティのDLLでは、実行可能なファイルを1つだけ生成することは可能ですか?

プロジェクトPrjAPrjBを使用します。現在、PrjBは、静的ライブラリPrjB.libではなく、動的ライブラリPrjB.dllを生成します。 PrjAPrjA.exeを生成するように設定する方法は、を埋め込み、1つのファイルのみを配備する必要がありますか?

注:制約はPrjB.DLLのみ提供され、スタティックライブラリprjB.LIBは提供されません。この質問はC++ How to compile dll in a .exeとは異なります。

MSVC /MD, /MT config using C++ Runtime Library

  • /MDは、マルチスレッド固有およびランタイムライブラリの DLL固有のバージョンを使用するようにアプリケーションを引き起こします。

  • /MTアプリケーションに、マルチスレッドの静的バージョンのランタイムライブラリを使用させます。

+0

*/MD、/ MDd、/ MT、/ MTdと同様の効果を得るように設定する方法はありますか?*詳細を教えてください。これらのフラグのドキュメントを読んだ後に、あなたが理解できなかったことは私には分かりません。 –

+0

質問と同様に、「すべてのプロジェクトを静的に1つの実行可能ファイルにリンクする方法」です。ランタイムライブラリの設定がそれと関係がありませんが、プロジェクトを静的にリンクするには、プロジェクトのタイプを「ダイナミックライブラリ」から「スタティックライブラリ」に変更する必要があります。 –

+0

さて、ProjBが.libを生成するようにしてください。/MD// MTスイッチは.dllファイルを.exeに変換しません。同じライブラリの2つのバージョン(.dllとしてコンパイルされたものと.libとしてコンパイルされたものの2つのバージョン)を選択します。 .libを本当に作成できないし、本当に単一の.exeが必要な場合は、アプリケーションを単一のexe post factumに "バンドル"できるツールがあります - 詳細は他の質問を参照してください。 –

答えて

0

他のいくつかのSOanswersに述べたように、このタスクのために利用可能な外部ツールがあります。 BoxedAppはその中で高く評価されています(しかし、支払われます)。

関連する問題