2011-01-19 18 views
20

Estoy intentando compilar JRTPLIB en Visual Studio 2010 en Windows 7. Ha sido una verdadera pesadilla ... pero al menos estoy reduciendo los problemas._ITERATOR_DEBUG_LEVEL error en visual studio

Esto queda.

Error 3 error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj) client 

Busqué en Google una tonelada y la causa parece ser uno se compila en modo de depuración mientras que el otro se compila en modo de lanzamiento.

Estoy intentando compilar un ejecutable de lanzamiento porque quiero probar en diferentes computadoras.

1) ¿Cuál no está en modo Release, JRTPLIB o cliente (el mío, el que está intentando compilar)?

2) ¿Cómo se puede cambiar ITERATOR_DEBUG_LEVEL? Ambos están utilizando Runtime Library/MT y las definiciones de preprocesador WIN32, _MT, junto con los valores predeterminados, supongo.

Saludos

+1

Me encantaría que respondiera a su pregunta n. ° 1, que no está en modo de lanzamiento. No está claro desde el mensaje de error. – morgancodes

Respuesta

11

compilar todo se utiliza con -D_ITERATOR_DEBUG_LEVEL = 0 opción. Lo es de manera predeterminada en el modo de lanzamiento VS 2010, pero algunas cosas todavía se crean con otras opciones y, por lo tanto, no son compatibles con binarios.

En los estudios visuales más antiguos había _SECURE_SCL y no estoy seguro de si algún código todavía puede usarlo. Coloque en alguna parte (por ejemplo, en stdafx.h) una comprobación estática que coincida.

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 while _ITERATOR_DEBUG_LEVEL == 0 
#endif 

Si desea ver qué valor ha _ITERATOR_DEBUG_LEVEL entonces usted puede utilizar algún mensaje pragma en el código para decirle.

+0

-D_ITERATOR_DEBUG_LEVEL = 0 en "C/C++" -> ¿Línea de comando? No cambia nada, aún el mismo error. Agregué el código que mencionaste, y no se activó. – KaiserJohaan

+0

¿Usó la opción para jrtplib y para el cliente? Entonces, algo en el código lo está cambiando de alguna manera. –

+0

¿hay nada más que uno pueda hacer? Estos problemas del compilador son realmente molestos, pasan más tiempo tratando de arreglarlo que la codificación>. KaiserJohaan

0

Encontré otra manera de generar estos errores.

Estaba usando la compilación por lotes de Visual Studio 2010 para compilar todas las combinaciones posibles de plataforma y configuración y estaba obteniendo estos errores. Al observar el resultado, se reveló que la compilación por lotes no respetaba las dependencias del proyecto, por lo que se vinculaba una biblioteca obsoleta a partir de la compilación Release con un archivo obj Debug recién compilado.

Varias líneas más adelante en el resultado de compilación construyeron la versión de depuración de la biblioteca.

Hacer la "creación por lotes" a mano (es decir, seleccionar manualmente las diversas combinaciones de plataforma y configuración) produjo una compilación limpia.

Moral: no utilice Visual Studio 2010 batch build. No sé si lo arreglaron en versiones posteriores de VS.

Cuestiones relacionadas