VS編譯方式 \MT \MD \MTd \MDd

在工程上右鍵-》屬性-》c/c++-》代碼生成-》運行庫

其中四個選項的對應含義如下:

多線程調試Dll (/MDd) 對應的是MD_DynamicDebug

多線程Dll (/MD) 對應的是MD_DynamicRelease

多線程(/MT) 對應的是MD_StaticRelease

多線程(/MTd)對應的是MD_StaticDebug


MSDN中的描述如下:


/MD 
使應用程序使用運行時庫的多線程並特定於DLL 的版本。定義 _MT 和 _DLL,並使編譯器將庫名 MSVCRT.lib 放入 .obj文件中。
用此選項編譯的應用程序靜態鏈接到MSVCRT.lib。該庫提供允許鏈接器解析外部引用的代碼層。實際工作代碼包含在 MSVCR90.DLL, 中,該庫必須在運行時對於與MSVCRT.lib 鏈接的應用程序可用。
當/MD 與 _STATIC_CPPLIB 預處理器定義 (/D_STATIC_CPPLIB)一起使用時,您的應用程序將與靜態多線程標準 C++ 庫 (libcpmt.lib) 而非動態版本 (msvcprt.lib)鏈接,但仍通過 msvcrt.lib 動態鏈接到主 CRT。
請注意,不支持_STATIC_CPPLIB 預處理器定義和 /clr 或 /clr:pure 編譯器選項的組合。有關 /clr選項的限制的更多信息,請參見 /clr 限制。

/MDd 
 定義_DEBUG、_MT 和 _DLL,並使應用程序使用運行時庫的調試多線程並特定於 DLL 的版本。它還使編譯器將庫名MSVCRTD.lib 放入 .obj 文件中。

/MT 
 使應用程序使用運行時庫的多線程靜態版本。定義_MT 並使編譯器將庫名 LIBCMT.lib 放入 .obj 文件中,以便鏈接器使用 LIBCMT.lib解析外部符號。

/MTd 
 定義_DEBUG 和 _MT。此選項還使編譯器將庫名 LIBCMTD.lib 放入 .obj 文件中,以便鏈接器使用LIBCMTD.lib 解析外部符號。


使用MT可以減少對很多VS自帶庫的潛在依賴,但是採用MT時,自身所引用的lib等都要採用相同的編譯方式得來,即所有模塊的生成方式應當保持一致性。


在MFC中 若要使用MT編譯方式 則 屬性->常規中MFC的使用應該改爲 在靜態中使用MFC

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章