2010-11-09 15 views
22

En proyectos VS2010, C++ me sale este error al vincular en x64/salida: LNK2038¿Qué significa _ITERATOR_DEBUG_LEVEL = 1?

error: falta de coincidencia detectada por '_ITERATOR_DEBUG_LEVEL': valor de '0' no coincide con el valor '1'

Todos los demás las combinaciones de configuración/plataforma funcionan bien. Así que una biblioteca estática se construye con _ITERATOR_DEBUG_LEVEL establecido en 0 y el .dll que depende de él de alguna manera tiene _ITERATOR_DEBUG_LEVEL establecido en 1. ¡Estoy tratando de descubrir qué significa eso para poder descifrar cómo desactivarlo!

Las únicas referencias a este error que encontré mientras buscaba en Google son cuando el conflicto _ITERATOR_DEBUG_LEVEL entra en conflicto con los valores de 0 y 2. Esto indica un intento de vincular la versión con la depuración. Pero estoy seguro de que ese no es el caso aquí.

+0

Vinculación de liberación con la biblioteca de depuración es la única manera de conseguir este error. Revísalo de nuevo. Si estás seguro, revísalo dos veces. –

+0

@ J-16: al parecer, no ;-p –

Respuesta

37

Bueno, después de luchar con esto durante una hora lo he descubierto justo después de que la pregunta ... para la posteridad:

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

De alguna manera me había _SECURE_SCL define como una definición de preprocesador sólo en el LANZAMIENTO/configuración x64 de mi DLL y tuve que entrecerrar los ojos para verlo. Una vez que eliminé esa definición, el error desapareció.

Editar: He encontrado este nice lecture/tutorial on msdn that (among other things) explains _ITERATOR_DEBUG_LEVEL. Desafortunadamente, requiere una versión bastante reciente de Microsoft Silverlight para ver.

+0

Hoy corrió sobre esto, lo que explica exactamente para qué es _ITERATOR_DEBUG_LEVEL y cuáles son sus valores si tiene curiosidad: http://channel9.msdn.com/Shows/Going+Deep/C9 -Lectures-Stephan-T-Lavavej-Advanced-STL-3-of-n – Skrymsli

+1

@Skyrmsli - Estoy editando su comentario en su respuesta. – Omnifarious

2

Me encontré con este problema en una versión de lanzamiento, pero descubrí que mi preprocesador estaba definiendo _DEBUG cuando debería haber sido NDEBUG. Cambiar a NDEBUG solucionó el problema.

2

Para aquellos con definiciones de preprocesador inmaculadas, que aún sufren este error, verifique la configuración de la biblioteca de tiempo de ejecución del proyecto.

Si se establece en cualquiera de las versiones de depuración, _ITERATOR_DEBUG_LEVEL obtendrá establecido en 2.

Cuestiones relacionadas