VC編譯選項 多線程(/MT)

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

相關文章
相關標籤/搜索