VC編譯選項MT,MTd

2022-02-17 21:08:14 字數 2852 閱讀 1721

vc編譯選項 多執行緒(/mt)

多執行緒除錯(/mtd)

多執行緒 dll (/md)

多執行緒除錯 dll (/mdd)

c 執行時庫                        庫檔案

single thread(static link) ml            libc.lib

debug single thread(static link) mld        libcd.lib

multithread(static link) mt            libcmt.lib

debug multithread(static link) mtd            libcmtd.lib

multithread(dynamic link) md            msvert.lib

debug multithread(dynamic link) mdd        msvertd.lib 

3. 各種 c 執行時庫的區別

( 1 )靜態鏈結的單執行緒庫

靜態鏈結的單執行緒庫只能用於單執行緒的應用程式, c 執行時庫的目標**最終被編譯在應用程式的二進位制檔案中。通過 /ml 編譯選項可以設定 visual c++ 使用靜態鏈結的單線

程庫。( 2 )靜態鏈結的多執行緒庫

靜態鏈結的多執行緒庫的目標**也最終被編譯在應用程式的二進位制檔案中,但是它可以在多執行緒程式中使用。通過 /mt 編譯選項可以設定 visual c++ 使用靜態鏈結的多執行緒庫。

( 3 )動態鏈結的執行時庫

動態鏈結的執行時庫將所有的 c 庫函式儲存在乙個單獨的動態鏈結庫 msvcrtxx.dll 中, msvcrtxx.dll 處理了多執行緒問題。使用 /md 編譯選項可以設定 visual c++ 使用動態

鏈結的執行時庫。

/mdd 、 /mld 或 /mtd 選項使用 debug runtime library( 除錯版本的執行時刻函式庫 ) ,與 /md 、 /ml 或 /mt 分別對應。 debug 版本的 runtime library 包含了除錯資訊

,並採用了一些保護機制以幫助發現錯誤,加強了對錯誤的檢測,因此在執行效能方面比不上 release 版本。 

下面是msdn關於visual c++ 編譯器選項的說明:

這些選項選擇單執行緒或多執行緒執行時例程,指示多執行緒模組是否為 dll,並選擇執行時庫的發布版本或除錯版本。

選項     說明

/md     定義 _mt 和 _dll 以便同時從標準 .h 檔案中選擇執行時例程的多執行緒特定版本和 dll 特定版本。此選項還使編譯器將庫名 msvcrt.lib 放入 .obj 檔案中。

用此選項編譯的應用程式靜態鏈結到 msvcrt.lib。該庫提供允許鏈結器解析外部引用的**層。實際工作**包含在 msvcr71.dll 中,該庫必須在執行時對於與 msvcrt.lib 鏈

接的應用程式可用。

當在定義了 _static_cpplib (/d_static_cpplib) 的情況下使用 /md 時,它將導致應用程式通過靜態多執行緒標準 c++ 庫 (libcpmt.lib) 而非動態版本 (msvcprt.lib) 進行鏈結

,同時仍通過 msvcrt.lib 動態鏈結到主 crt。

/mdd     定義 _debug、_mt 和 _dll,以便從標準 .h 檔案中選擇執行時例程的除錯多執行緒特定版本和 dll 特定版本。它還使編譯器將庫名 msvcrtd.lib 放入 .obj 檔案中。

/ml     使編譯器將庫名 libc.lib 放入 .obj 檔案中,以便鏈結器使用 libc.lib 解析外部符號。這是編譯器的預設操作。libc.lib 不提供多執行緒支援。

/mld     定義 _debug 並使編譯器將庫名 libcd.lib 放入 .obj 檔案中,以便鏈結器使用 libcd.lib 解析外部符號。libcd.lib 不提供多執行緒支援。

/mt     定義 _mt,以便從標準頭 (.h) 檔案中選擇執行時例程的多執行緒特定版本。此選項還使編譯器將庫名 libcmt.lib 放入 .obj 檔案中,以便鏈結器使用 libcmt.lib 解析

外部符號。建立多執行緒程式需要 /mt     或 /md(或它們的除錯等效選項 /mtd 或 /mdd)。

/mtd     定義 _debug 和 _mt。定義 _mt 會導致從標準 .h 檔案中選擇執行時例程的多執行緒特定版本。此選項還使編譯器將庫名 libcmtd.lib 放入 .obj 檔案中,以便鏈結器使

用 libcmtd.lib 解析外部符號。創    建多執行緒程式需要 /mtd 或 /mdd(或它們的非除錯等效選項 /mt 或 md)。

/ld     建立 dll。

將 /dll 選項傳遞到鏈結器。鏈結器查詢 dllmain 函式,但並不需要該函式。如果沒有編寫 dllmain 函式,鏈結器將插入返回 true 的 dllmain 函式。

鏈結 dll 啟動**。

如果命令列上未指定匯出 (.exp) 檔案,則建立導入庫 (.lib);將導入庫鏈結到呼叫您的 dll 的應用程式。

將 /fe 解釋為命名 dll 而不是 .exe 檔案;預設程式名成為基名稱.dll 而不是基名稱.exe。

如果還未顯式指定 /m 選項之一,則將預設執行時庫支援更改為 /mt。

/ldd     建立除錯 dll。定義 _debug。

警告   不要混合使用執行時庫的靜態版本和動態版本。在乙個程序中有多個執行時庫副本會導致問題,因為副本中的靜態資料不與其他副本共享。鏈結器禁止在 .exe 檔案內

部既使用靜態版本又使用動態版本鏈結,但您仍可以使用執行時庫的兩個(或更多)副本。例如,當與用動態 (dll) 版本的執行時庫鏈結的 .exe 檔案一起使用時,用靜態(非 

dll)版本的執行時庫鏈結的動態鏈結庫可能導致問題。(還應該避免在乙個程序中混合使用這些庫的除錯版本和非除錯版本)。

VC編譯選項

vc編譯選項 od 禁用優化 預設值 disable optimizations default ox 最大化選項。ogityb2 gs maximum opts.ogityb1 gs og 啟用全域性優化 enable global optimization oy 啟用框架指標省略 enable ...

VC編譯選項

今天練習vc編譯選項設定。現在有三個工程a b和c a和b是鏈結庫,c是exe的demo程式。b呼叫a,c呼叫b。1.最初的編譯是 a b編為動態庫,並生成lib,c包含這個lib,生成exe。這樣是簡單的,c的專案設定link屬性頁 category為input的選項中,填入a與b的lib就可以了...

VC編譯選項 MT MTd MD MDd

vc編譯選項 多執行緒 mt 多執行緒除錯 mtd 多執行緒 dll md 多執行緒除錯 dll mdd c 執行時庫 庫檔案 single thread static link ml libc.lib debug single thread static link mld libcd.lib mu...