關於使用VS2015靜態編譯
阿新 • • 發佈:2019-01-07
首先必須搞清楚專案->專案屬性->配置屬性->C/C++->程式碼生成->執行庫中四個選項的關係:
多執行緒除錯Dll (/MDd) 對應——-MD_DynamicDebug
多執行緒Dll (/MD) 對應————-MD_DynamicRelease
多執行緒(/MT) 對應—————–MD_StaticRelease
多執行緒(/MTd)對應—————-MD_StaticDebug
在msdn中有詳細解釋:
http://msdn.microsoft.com/en-us/library/2kzt1wy3(VS.80).aspx
一句話總結就是:D用於動態,T用於靜態,帶d的是debug模式的
LNK2038 檢測到“_ITERATOR_DEBUG_LEVEL”的不匹配項: 值“0”不匹配值“2”
LNK2038 檢測到“RuntimeLibrary”的不匹配項: 值“MD_DynamicRelease”不匹配值“MDd_DynamicDebug”
一般就是用Release模式去連結了一個Debug編譯出的lib,或者用Debug模式連結了Release編譯的lib。因此先檢查上面的執行庫是否對應正確,release模式一定不能選MDd或MTd的。
若出現下面這種警告資訊:
請檢查專案->專案屬性->配置屬性->連結器->輸入->附加依賴項
cv210.lib cvaux210.lib cxcore210.lib highgui210.lib ml210.lib
只能在Release模式下連結,對應的Debug版本就是:
cv210d.lib cvaux210d.lib cxcore210d.lib highgui210d.lib ml210d.lib
(PS:事實上經過測試,我的情況是,release和debug模式下都必須連結不帶d的lib檔案,否則就會出現上述報錯,因此各位還是根據自己的實際情況選擇,網上說的對你不一定適用,僅供參考)
當上面的問題都解決後,又出現下面這個錯誤資訊的話:
error LNK2038: 檢測到“RuntimeLibrary”的不匹配項: 值“MDd_DynamicDebug”不匹配值“MTd_StaticDebug”
其他參考資料: