MSVC++は、単一の実行可能ファイルのみを展開するプログラマのための最適化を提供します。/MTでビルドすると、C++ランタイムライブラリと標準C++ライブラリをEXEにリンクできます。または/ MDを使用してC++ランタイムライブラリ(.DLLファイル)を呼び出します。1つの実行可能ファイルのみを展開する方法
しかし、独自のコードやサードパーティのDLLでは、実行可能なファイルを1つだけ生成することは可能ですか?
プロジェクトPrjA
はPrjB
を使用します。現在、PrjB
は、静的ライブラリPrjB.lib
ではなく、動的ライブラリPrjB.dll
を生成します。 PrjA
がPrjA.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アプリケーションに、マルチスレッドの静的バージョンのランタイムライブラリを使用させます。
*/MD、/ MDd、/ MT、/ MTdと同様の効果を得るように設定する方法はありますか?*詳細を教えてください。これらのフラグのドキュメントを読んだ後に、あなたが理解できなかったことは私には分かりません。 –
質問と同様に、「すべてのプロジェクトを静的に1つの実行可能ファイルにリンクする方法」です。ランタイムライブラリの設定がそれと関係がありませんが、プロジェクトを静的にリンクするには、プロジェクトのタイプを「ダイナミックライブラリ」から「スタティックライブラリ」に変更する必要があります。 –
さて、ProjBが.libを生成するようにしてください。/MD// MTスイッチは.dllファイルを.exeに変換しません。同じライブラリの2つのバージョン(.dllとしてコンパイルされたものと.libとしてコンパイルされたものの2つのバージョン)を選択します。 .libを本当に作成できないし、本当に単一の.exeが必要な場合は、アプリケーションを単一のexe post factumに "バンドル"できるツールがあります - 詳細は他の質問を参照してください。 –