2012-07-16 36 views
3

檢測不匹配我試圖讓一個VS2008項目在VS2010編譯,但我不斷收到錯誤:錯誤LNK2038:對於「_ITERATOR_DEBUG_LEVEL」

foo.obj : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in barr.obj 

我得到這個錯誤只與包含在libsquish library.在項目中。 它接縫,它不會在調試模式下編譯,我不明白爲什麼。

PS:我已經通過谷歌上幾個相關的線程詢問這裏

回答

2

錯誤可以通過調試混合在一起造成的構建和發佈版本在同一個可執行文件或DLL之前。

使用/ MDd而不是/ MD發佈版本的靜態庫,而應用程序是/ MD在發行版中。在靜態lib項目中設置正確的/ MD解決了問題。

這是在項目屬性

選擇配置屬性/ C C++ /代碼生成的樹和運行時庫設置爲你的所有依賴項目和應用程序相同的選項來完成的。

搜索_ITERATOR_DEBUG_LEVEL和_SECURE_SCL刪除它們或在所有項目和來源中適當地設置它們並重建所有內容。

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds) 
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined) 
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds) 

總之,您可能是混合版本和調試dll。不要在調試中連接發佈dll,反之亦然!

+0

自從我提出這個問題已經兩年了,所以我不能真正嘗試您的解決方案,但我會將其標記爲正確的答案,因爲它是有道理的。無論如何thx的努力。 – 2014-08-06 14:50:36