c++ visual-studio-2010 linker

c++ - ¿Qué significa_ITERATOR_DEBUG_LEVEL=1?



visual-studio-2010 linker (3)

Bueno, después de luchar con esto por una hora, lo descubrí justo después de hacer 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, _SECURE_SCL se definió como una definición de preprocesador solo en la configuración de Release / x64 de mi DLL y tuve que entrecerrar los ojos para notarlo. Una vez que quité esa definición, el error desapareció.

Edición: encontré esta buena lección / tutorial en msdn que (entre otras cosas) explica _ITERATOR_DEBUG_LEVEL . Desafortunadamente, requiere una versión bastante reciente de Microsoft Silverlight para ver.

En VS2010, proyecto de C ++, aparece este error al vincular en x64 / Release:

error LNK2038: se detectó una falta de coincidencia para ''_ITERATOR_DEBUG_LEVEL'': el valor ''0'' no coincide con el valor ''1''

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

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


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


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

Si se establece en una de las versiones de depuración, _ITERATOR_DEBUG_LEVEL se establecerá en 2.