/MD、/MT、/LD (ランタイム ライブラリの使用)

マルチスレッド モジュールが DLL であるかどうかを指定し、ランタイム ライブラリのリテール バージョンまたはデバッグ バージョンを指定します。

構文

/MD[d]
/MT[d]
/LD[d]

解説

オプション 説明
/MD アプリケーションでランタイム ライブラリのマルチスレッド対応および DLL 対応バージョンが使用されます。 _MT および _DLL を定義し、コンパイラにライブラリ名 MSVCRT.lib を .obj ファイルに挿入させます。

このオプションを使用してコンパイルされたアプリケーションは、MSVCRT.lib に静的にリンクされます。 このライブラリには、リンカーが外部参照を解決できるようにするコード レイヤーが用意されています。 実際に動くコードは MSVCR<バージョン番号>.DLL に入っているため、実行時には、MSVCRT.lib とリンクしているアプリケーションがこの DLL を使用できるようにしておく必要があります。
/MDd _DEBUG_MT、および _DLL を定義します。アプリケーションで、マルチスレッド対応バージョンおよび DLL 対応バージョンのランタイム ライブラリが使用されます。 また、コンパイラによって、ライブラリ名 MSVCRTD.lib が .obj ファイルに挿入されます。
/MT アプリケーションで、マルチスレッド バージョンの静的なランタイム ライブラリが使用されます。 _MT を定義します。また、コンパイラにライブラリ名 LIBCMT.lib を .obj ファイルに挿入させるため、リンカーは LIBCMT.lib を使って外部シンボルを解決します。
/MTd _DEBUG および _MT を定義します。 このオプションによって、リンカーが LIBCMTD.lib を使用して外部シンボルを解決できるように、コンパイラによりライブラリ名 LIBCMTD.lib が .obj ファイルに挿入されます。
/LD DLL を作成します。

/DLL オプションをリンカーに渡します。 リンカーは DllMain 関数の有無を確認します。 DllMain 関数が記述されていないと、TRUE を返す DllMain 関数がリンク時に自動的に挿入されます。

DLL の起動コードをリンクします。

コマンド ラインでエクスポート (.exp) ファイルが指定されていない場合は、インポート ライブラリ (.lib) を作成します。 このインポート ライブラリを、DLL を呼び出すアプリケーションにリンクしてください。

/Fe (EXE ファイルの名前の指定) を、.exe ファイルではなく DLL の名前として解釈します。 既定では、プログラム名は <ベース名>.exe ではなく、<ベース名>.dll になります。

/MD を明示的に指定している場合以外は、/MT が暗黙に指定されます。
/LDd デバッグ DLL を作成します。 _MT および _DEBUG を定義します。

C ランタイム ライブラリ、および /clr (共通言語ランタイムのコンパイル) を指定したコンパイルで使用されるライブラリについて詳しくは、CRT ライブラリの機能に関する記事をご覧ください。

リンカーの特定の呼び出しに渡されるすべてのモジュールは、同じランタイム ライブラリ コンパイラ オプション (/MD/MT/LD) を指定してコンパイルされている必要があります。

デバッグ バージョンのランタイム ライブラリを使用する方法について詳しくは、C ランタイム ライブラリ リファレンスに関する記事をご覧ください。

DLL について詳しくは、「Visual Studio で C/C++ DLL を作成する」をご覧ください。

Visual Studio 開発環境でこのコンパイラ オプションを設定するには

  1. プロジェクトの [プロパティ ページ] ダイアログ ボックスを開きます。 詳細については、Visual Studio での C++ コンパイラとビルド プロパティの設定に関する記事を参照してください。

  2. [構成プロパティ]>[C/C++]>[コード生成] プロパティ ページを選択します。

  3. [ランタイム ライブラリ] プロパティを変更します。

このコンパイラ オプションをコードから設定するには

関連項目

MSVC コンパイラ オプション
MSVC コンパイラ コマンド ラインの構文