ランタイムライブラリ /MD /MT

メモ
VC2010

コピペ https://msdn.microsoft.com/ja-jp/library/vstudio/abx4dbyh%28v=vs.100%29.aspx

C run-time library (without iostream or standard C++ library) Associated DLL Characteristics Option Preprocessor directives
libcmt.lib None, static link. Multithreaded, static link /MT _MT
msvcrt.lib msvcr100.dll Multithreaded, dynamic link (import library for MSVCR100.DLL). Be aware that if you use the Standard C++ Library, your program will need MSVCP100.DLL to run. /MD _MT, _DLL
libcmtd.lib None, static link Multithreaded, static link (debug) /MTd _DEBUG, _MT
msvcrtd.lib msvcr100d.dll Multithreaded, dynamic link (import library for MSVCR100D.DLL) (debug). /MDd _DEBUG, _MT, _DLL
msvcmrt.lib None, static link C Runtime static library. Used for mixed managed/native code. /clr

/clr:oldSyntax

msvcurt.lib None, static link C Runtime static library compiled as 100% pure MSIL code. All code complies with the ECMA URT spec for MSIL. /clr:pure  

 

コピペ https://msdn.microsoft.com/en-us/library/abx4dbyh%28v=vs.100%29.aspx

Characteristics Option Preprocessor directives
LIBCPMT.LIB Multithreaded, static link /MT _MT
MSVCPRT.LIB Multithreaded, dynamic link (import library for MSVCP100.dll) /MD _MT, _DLL
LIBCPMTD.LIB Multithreaded, static link /MTd _DEBUG, _MT
MSVCPRTD.LIB Multithreaded, dynamic link (import library for MSVCP100D.DLL) /MDd _DEBUG, _MT, _DLL

コピペ https://msdn.microsoft.com/en-us/library/b0084kay.aspx

_M_CEE Defined for a compilation that uses any form of /clr (/clr:oldSyntax, /clr:safe, for example).
_M_CEE_PURE Defined for a compilation that uses /clr:pure.
_M_CEE_SAFE Defined for a compilation that uses /clr:safe.

コピペ C:\Program Files\Microsoft Visual Studio 9.0\VC\include\use_ansi.h

/MT

libcmt.libにスタティックにリンクする。Cランタイムコードは自分のEXEやDLLに埋め込まれる。DLLでは普通はこれを使わない。このオプションを指定するとコンパイラは_MTをdefineする。C++ソースコードはこのフラグによってC++ランタイムをpragma comment(lib…)でリンクする。/MTの場合はlibcpmt.libがリンクされる。これはスタティックライブラリで自分のEXEにCPPコードが埋め込まれる。

/MD

イ ンポートライブラリmsvcrt.libにリンクする。実行時にmsvcr100.dllにリンクされる。Cランタイムコードはmsvcr100.dll にある。DLLを作るときは通常これを使い、そうして作られたDLLを使うEXEをリンクするときも/MDを使う。そうすればランタイムが共有される。コンパイラは_MTと_DLLをdefineしその結果msvcprt.libがリンクされる、これはインポートライブラリで意実行時にmsvcp100.dllにリンクされる。/MDを使いCPPのリンクはスタティックで行いたいときは_STATIC_CPPLIBを定義する。

/clr:pure /clr

‘/clr’ と ‘/MT’ は同時に指定できないので、/MDになる。
pureをつけるとCランタイムがリンクされない。あとは不明

Leave a Reply

Your email address will not be published. Required fields are marked *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)