VC編譯選項 MT MTd...

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


原文地址:http://blog.csdn.net/leishiwei/article/details/4009253

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