我的程式必定會使用C/C++的系統函數,我們可以使用靜态庫的方式(/MT)使用這些函數,也可以使用動态庫的方式(/MD)使用這些函數。MT,連結時需要LIBCMT.lib;MD,連結時需要MSVCRT.lib ,運作時需要 MSVCR80.DLL。
各種 C 運作時庫的差別
( 1 )靜态連結的單線程庫
靜态連結的單線程庫隻能用于單線程的應用程式, C 運作時庫的目标代碼最終被編譯在應用程式的二進制檔案中。通過 /ML 編譯選項可以設定 Visual C++ 使用靜态連結的單線程庫。
( 2 )靜态連結的多線程庫
靜态連結的多線程庫的目标代碼也最終被編譯在應用程式的二進制檔案中,但是它可以在多線程程式中使用。通過 /MT 編譯選項可以設定 Visual C++ 使用靜态連結的多線程庫。
( 3 )動态連結的運作時庫
動态連結的運作時庫将所有的 C 庫函數儲存在一個單獨的動态連結庫 MSVCRTxx.DLL 中, MSVCRTxx.DLL 處理了多線程問題。使用 /MD 編譯選項可以設定 Visual C++ 使用動态
多線程(/MT) 多線程調試(/MTd) 多線程 DLL (/MD) 多線程調試
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 |