最近開發個程序,Copy到虛擬機環境中測試時提示缺少msvcr100.dll,於是想到編譯時設置選項去除依賴。
什麼是 msvcr100.dll
MS = Microsoft
V = Visual
C = C program language
R = Run-time
100 = Version
什麼是 msvcp100.dll
MS = Microsoft
V = Visual
CP = C++
100 = version
VS中的多線程(/MT)、多線程調試(/MTd)、多線程DLL(/MD)、多線程調試DLL(/MDd)的區別
一種語言的開發環境往往會附帶有語言庫,這些庫就是對操作系統的API的包裝,我們也稱這些語言庫爲運行庫
對於MSVC的運行庫(CRT),按照靜態/動態鏈接,可以分爲靜態版和動態版;按照調試/發佈,可以分爲調試版本和發佈版本;按照單線程/多線程,可以分爲單線程版本和多線程版本(但是目前VS中已不提供單線程版本了)
在調試模式下,使用調試運行庫:多線程調試(/MTd)、多線程調試DLL(/MDd)
在發佈模式下,使用發佈運行庫:多線程(/MT)、多線程DLL(/MD)
調試模式下運行庫帶d,但發佈模式不帶。調試與發佈的區別在於,發佈模式省略了程序的調試信息,簡單來說就是刪除了調試模式下的用於調試的內容,所以一般情況下,發佈模式下生成的可執行文件的大小比調試模式下生成的要小
靜態鏈接:多線程(/MT)、多線程調試(/MTd)
動態鏈接:多線程DLL(/MD)、多線程調試DLL(/MDd)
動態鏈接爲D,靜態鏈接爲T。兩者的區別在於,靜態鏈接將程序所依賴的運行庫集成到了可執行文件中,可執行文件運行時不再需要運行庫;動態鏈接沒有把程序所依賴的運行庫集成到可執行文件中,可執行文件運行時需要運行庫。由於靜態鏈接將程序所依賴的運行庫集成到了可執行文件中,一般情況下,生成的可執行文件的大小大於動態鏈接生成的
對這四種運行庫的選在位於VS的項目屬性-》C/C++-》代碼生成-》運行庫:
解決的辦法
Release版本
Visual Studio 2010, 打開菜單中的項目》屬性:
打開 配置屬性 | C/C++ | 代碼生成
找到 運行庫.將 多線程DLL(/MD) 改爲 多線程(/MT)
重新編譯.
Debug版本
Visual Studio 2010, 打開菜單中的項目》屬性:
打開 配置屬性 | C/C++ | 代碼生成
找到 運行庫.將 多線程調試DLL(/MDd) 改爲 多線程調試(/MTd)
重新編譯.