2010-11-09 105 views
22

在VS2010,C++項目X64 /發佈鏈接時,我得到這個錯誤 '_ITERATOR_DEBUG_LEVEL' 檢測不匹配: '0' 值不匹配的值 '1'是什麼_ITERATOR_DEBUG_LEVEL = 1是什麼意思?</p> <p>錯誤LNK2038:

所有其他配置/平臺組合鏈接就好了。因此,靜態庫是建立與_ITERATOR_DEBUG_LEVEL設置爲0,並且依賴於它在某種程度上具有_ITERATOR_DEBUG_LEVEL設置爲1。我想弄清楚這是什麼意思,所以我可以弄清楚如何將其關閉.dll文件!

這個錯誤,我發現谷歌搜索,而當有_ITERATOR_DEBUG_LEVEL與0和2價值觀衝突表示嘗試鏈接與調試版本中唯一引用。但我相信在這裏並非如此。

+0

鏈接與調試庫版本是得到這個錯誤的唯一方法。再次檢查。如果您確定,請再次檢查兩次。 – 2010-11-09 02:48:02

+0

@ J-16:http://channel9.msdn.com/Shows/Going+Deep/C9:顯然不是今天這個這也解釋了什麼_ITERATOR_DEBUG_LEVEL是和它的價值是什麼,如果你是好奇跨;-p – 2010-11-09 03:01:05

回答

37

好了,有了這個掙扎了一個小時後,我想通了之後我問的問題......留給後人:

_ITERATOR_DEBUG_LEVEL = 0 (in release mode) 
_ITERATOR_DEBUG_LEVEL = 1 (in release mode if _SECURE_SCL is defined) 
_ITERATOR_DEBUG_LEVEL = 2 (in debug mode) 

不知怎的,我已經_SECURE_SCL定義爲只在發佈預處理器定義/我的DLL的x64配置,我不得不斜視真的很難注意到它。一旦我刪除了這個定義,錯誤就消失了。我發現這個nice lecture/tutorial on msdn that (among other things) explains _ITERATOR_DEBUG_LEVEL。不幸的是,它確實需要一個相當新的Microsoft Silverlight版本才能觀看。

+0

然-Lectures - 斯蒂芬-T-Lavavej - 高級 - STL-3-的-N – Skrymsli 2011-08-04 15:28:05

+1

@Skyrmsli - 我編輯您的評論到你的答案。 – Omnifarious 2011-09-14 23:17:51

2

我跑進一個發佈版本這個問題,但我發現我的預處理器被定義_DEBUG時,它應該是NDEBUG。更改爲NDEBUG解決了問題。

2

對於那些完美的預處理器定義,但仍從這個錯誤遭受,檢查項目的運行時庫設置。

如果設置爲調試版本中的任一個,_ITERATOR_DEBUG_LEVEL將設置爲2。