vc專案屬性→配置屬性→c/c++→**生成→執行時庫 可以採用的方式有:多執行緒(/mt)、多執行緒除錯(/mtd)、多執行緒dll(/md)、多執行緒除錯dll(/mdd)、單執行緒(/ml)、單執行緒除錯(/mld)。
目前win7、win10等,選擇md問題不大,但是xp等一些比較老的系統需要選擇mt
/mt是 "multithread, static version 」 意思是多執行緒靜態的版本,定義了它後,編譯器把libcmt.lib 安置到obj檔案中,讓鏈結器使用libcmt.lib 處理外部符號。
/md是 "multithread- and dll-specific version」 ,意思是多執行緒dll版本,定義了它後,編譯器把 msvcrt.lib 安置到obj檔案中,它連線到dll的方式是靜態鏈結,實際上工作的庫是msvcr80.dll。
即:靜態執行時庫:libcmt.lib
動態執行時庫:msvcrt.lib + msvcr80.dll
所以,當你用cmake生成工程檔案時,若cmake是用/mt生成的(檢視工程原始目錄的cmakelists.txt),則它所呼叫的執行時庫為:libcmt.lib,若生成的工程的執行時庫(runtime library)你選擇/md,則此工程在編譯後鏈結的時候,將會呼叫動態執行時庫:msvcrt.lib + msvcr80.dll,明顯,兩次對同乙個某執行時庫里的函式呼叫的庫不同,則會出現重定義的錯誤。若此工程生成的是庫檔案,則其他工程呼叫此庫時也必須是/mt。
其中以小寫「d」結尾的選項表示的debug版本的,沒有「d」的為release版本。大型專案中必須要求所有元件和第三方庫的執行時庫是統一的,否則將會出現lnk2005井噴。
單執行緒執行時庫選項/ml和/mld在vs2003以後就被廢了。
VS 執行庫MT MD的區別
vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld 目前win7 win10等,選擇md問題不大,但是xp等一些比較老的系統需要選擇mt mt是 multith...
VC執行庫 ( MT MD 等)
由於老是混淆這些概念,特轉此微博。vc專案屬性 配置屬性 c c 生成 執行時庫 可以採用的方式有 多執行緒 mt 多執行緒除錯 mtd 多執行緒dll md 多執行緒除錯dll mdd 單執行緒 ml 單執行緒除錯 mld reusable library switch library macro...
mysql vc執行庫 VC 執行庫安裝
vc 執行庫 visual c 可再發行程式包 是執行使用相應版本的 visual c 開發的應用程式時必要的元件。wampserver內建的apache mysql mariadb和php就依賴vc 執行庫,所以我們需要在電腦上安裝好vc 執行庫,否則無法正常使用wampserver。wampse...