2010-11-02 17 views
32

Acabo de mover una solución de Visual Studio (C++) a otra computadora, configuré todos los directorios y las configuraciones hasta donde puedo ver, e hice un limpiar/reconstruir en la solución. Recibo el error anterior en un montón de .obj's en compilación, no estoy seguro de qué hacer al respecto._iterator_debug_level value '0' no coincide con el valor '2'

Respuesta

26

Parece que está mezclando archivos de objetos creados con configuraciones diferentes. Intente hacer una reconstrucción limpia completa y compruebe todas las configuraciones de archivo de proyecto para asegurarse de que la macro _ITERATOR_DEBUG_LEVEL sea la misma (por ejemplo, no está mezclando depuración y liberando objetos construidos).

+4

Por alguna razón, uno de mis proyectos tenía _SECURE_SCL = 1 definido en modo de lanzamiento y esto causó el error del enlazador. – Gyuri

+0

Otra posibilidad es algún archivo de proyecto/fuente que define _HAS_ITERATOR_DEBUGGING – korbes

16

La mezcla de binarios (archivos de objeto) es una razón; otro (que encontré) es la definición falsa de la macro _DEBUG en la compilación de lanzamiento. _DEBUG no es una macro estándar, pero es utilizada por Microsoft.

Después de editar el -file .vcxproj en Emacs He escrito mal _DEBUG en lugar de NDEBUG para la liberación, y se encontró precisamente en el mismo error de generación.

+0

bang on ...... :) – Sandip

13

En algunos casos, la mezcla de las opciones en

Propiedades> Propiedades de configuración> C/C++> Generación de código> Tiempo de ejecución Biblioteca

Entre incluido Biblioteca (s) y actualmente proyecto de trabajo puede causar este problema.

Dependiendo del uso establecerlo como /MD o /MT o /MDd o /MTd de manera uniforme en todos los proyectos.

+0

Gracias, funcionó. – lourencoccc

0

Descubrí (extrañamente) que _CRT_NON_CONFORMING_SWPRINTFS lo causa. Cuando lo elimino, no obtengo "_iterator_debug_level value '0' no coincide con el valor '2'", sino la siguiente advertencia:

Error 6 error C4996: '_swprintf': swprintf se ha cambiado para conformarse con el estándar ISO C, agregando un parámetro de recuento de caracteres adicionales. Para usar swprintf de Microsoft tradicional, configure _CRT_NON_CONFORMING_SWPRINTFS.

0

He estado tratando de resolver este problema durante cinco días. El código de Point Cloud Library (PCL) se crea correctamente en el modo de depuración pero falla en el modo de lanzamiento.

He reconfigurado mi biblioteca varias veces pero no sirvió. Descubrí que el problema era que la versión de lanzamiento heredaba _DEBUG, por lo que la deseleccioné en las propiedades del proyecto >> Preprocesador >> Definiciones del procesador y se solucionó.

Cuestiones relacionadas