メモ
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#if !defined(_M_CEE_PURE) && !defined(MRTDLL) #if defined(_DLL) && !defined(_STATIC_CPPLIB) #ifdef _DEBUG #pragma comment(lib,"msvcprtd") #else /* _DEBUG */ #pragma comment(lib,"msvcprt") #endif /* _DEBUG */ #else /* _DLL && !STATIC_CPPLIB */ #ifdef _DEBUG #pragma comment(lib,"libcpmtd") #else /* _DEBUG */ #pragma comment(lib,"libcpmt") #endif /* _DEBUG */ #endif /* _DLL && !STATIC_CPPLIB */ #endif /* !defined(_M_CEE_PURE) && !defined(MRTDLL) */ |
/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ランタイムがリンクされない。あとは不明