22

In VS2010, C++ project I get this error when linking in x64/Release:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '1'

All other configuration/platform combinations link just fine. So a static library is built with _ITERATOR_DEBUG_LEVEL set to 0 and the .dll that depends on it somehow has _ITERATOR_DEBUG_LEVEL set to 1. I'm trying to figure out what that means so I can figure out how to turn it off!

The only references to this error that I found while Googling are when _ITERATOR_DEBUG_LEVEL's conflict with values of 0 and 2. That indicates an attempt to link release with debug. But I'm sure that's not the case here.

1
  • Linking release with debug library is the only way to get this error. Check it again. If you are sure, check it again, twice. Commented Nov 9, 2010 at 2:48

3 Answers 3

37

Well, after struggling with this for an hour I figured it out right after I asked the question... for posterity:

_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)

Somehow I had _SECURE_SCL defined as a preprocessor definition only in the Release/x64 configuration of my DLL and I had to squint really hard to notice it. Once I removed that definition, the error went away.

Edit: I found this nice lecture/tutorial on msdn that (among other things) explains _ITERATOR_DEBUG_LEVEL. Unfortunately, it does require a fairly recent version of Microsoft Silverlight to watch.

Sign up to request clarification or add additional context in comments.

1 Comment

Ran across this today which explains exactly what _ITERATOR_DEBUG_LEVEL is for and what its values are if you are curious: channel9.msdn.com/Shows/Going+Deep/…
3

For those with immaculate preprocessor definitions, yet still suffering from this error, check the project's runtime library setting.

If set to either one of the debug versions, _ITERATOR_DEBUG_LEVEL will get set to 2.

Comments

2

I ran into this problem on a release build, but I found that my preprocessor was defining _DEBUG when it should have been NDEBUG. Changing to NDEBUG fixed the problem.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.