VC編譯選項/MT/MTd/MD/MDd說明

來源:互聯網
上載者:User

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)版本的執行階段程式庫連結的動態連結程式庫可能導致問題。(還應該避免在一個進程中混合使用這些庫的調試版本和非調試版本)。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.