VC執行時庫 MD MDd MT MTd說明

2021-09-02 16:05:31 字數 2699 閱讀 1041

vc執行時庫設定:vc專案屬性—>配置屬性—>c/c++—>**生成—>執行時庫。可以採用的方式有:多執行緒(/mt)、多執行緒除錯(/mtd)、多執行緒dll(/md)、多執行緒除錯dll(/mdd)、單執行緒(/ml)、單執行緒除錯(/mld)。vs2008目前支援以上4種:

各執行時庫的說明,參考msdn的/md、/mt、/ld(使用執行時庫)[

vs2003以後被廢棄。

debug single threaded

/mld

libcd

_debug

vs2003以後被廢棄。

static multithread

/mtlibcmt

_mt使應用程式使用執行時庫的多執行緒靜態版本。定義_mt並使編譯器將庫名 libcmt.lib 放入 .obj 檔案中,以便鏈結器使用 libcmt.lib 解析外部符號。

debug static multithread

/mtd

libcmtd

_debug and _mt

定義_debug_mt。此選項還使編譯器將庫名 libcmtd.lib 放入 .obj 檔案中,以便鏈結器使用 libcmtd.lib 解析外部符號。

dynamic link (dll)

/mdmsvcrt

_mt and _dll

使應用程式使用執行時庫的多執行緒並特定於 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 限制

debug dynamic link (dll)

/mdd

msvcrtd

_debug, _mt, and _dll

定義_debug_mt_dll,並使應用程式使用執行時庫的除錯多執行緒並特定於 dll 的版本。它還使編譯器將庫名 msvcrtd.lib 放入 .obj 檔案中。

其中以小寫「d」結尾的選項表示的debug版本的,沒有「d」的為release版本。

(1)/mt和/mtd表示採用多執行緒crt庫的靜態lib版本。該選項會在編譯時將執行時庫以靜態lib的形式完全嵌入。該選項生成的可執行檔案執行時不需要執行時庫dll的參加,會獲得輕微的效能提公升,但最終生成的二進位制**因鏈入龐大的執行時庫實現而變得非常臃腫。當某專案以靜態鏈結庫的形式嵌入到多個專案,則可能造成執行時庫的記憶體管理有多份,最終將導致致命的「invalid address specified to rtlvalidateheap」問題。另外託管c++和cli

中不再支援/mt和/mtd選項。

(2)/md和/mdd表示採用多執行緒crt庫的動態dll版本,會使應用程式使用執行時庫特定版本的多執行緒dll。鏈結時將按照傳統vc鏈結dll的方式將執行時庫msvcrxx.dll的導入庫msvcrt.lib鏈結,在執行時要求安裝了相應版本的vc執行時庫可再發行元件包(當然把這些執行時庫dll放在應用程式目錄下也是可以的)。 因/md和/mdd方式不會將執行時庫鏈結到可執行檔案內部,可有效減少可執行檔案尺寸。當多專案以md方式運作時,其內部會採用同乙個堆,記憶體管理將被簡化,

跨模組記憶體管理

問題也能得到緩解。

(3)結論:/md和/mdd將是潮流所趨,/ml和/mld方式請及時放棄,/mt和/mtd在非必要時最好也不要採用了。大型專案中必須要求所有元件和第三方庫的執行時庫是統一的,否則將會出現鏈結器工具錯誤 lnk2005 (c++)[msdn.microsoft.com/zh-cn/library/72zdcz6f(vs.80).aspx]井噴。

(4)實際使用參考:visual studio執行時庫mt、mtd、md、mdd的研究。

VC執行時庫

vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld reusable library switch library macro s defined single...

VC執行時庫

vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld reusable library switch library macro s defined single...

VC執行時庫( MD MT等)

vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld 其中以小寫 d 結尾的選項表示的debug版本的,沒有 d 的為release版本。大型專案中必須要求所有元...