2010-10-31 10 views
34

estoy tratando de puerto una pequeña aplicación mío de Win XP y VS 2005 para Windows 7 y VS 2010.¡Ayuda con error de enlazador LNK2038!

Las compilaciones de aplicaciones y funciona sin problemas en modo de depuración, sin embargo en modo de lanzamiento me sale el siguiente error:

pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for 
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj 

lo peor es que no sé donde debería empezar a comprobar ...

Cualquier ayuda será muy apreciada.

+1

¿Ha ponerse una "limpia" ¿primero? – BobbyShaftoe

+1

Sí, lo he intentado también ... – Wartin

+1

Esto ocurre cuando algunos de sus proyectos se están compilando en modo Depuración y algunos en Versión. Asegúrese de que todos estén en el mismo modo. –

Respuesta

36

Su aplicación se está compilando en modo de lanzamiento, pero está enlazando con la versión de depuración de PCRE, que tenía/MTd (o similar) configurado, causando la falta de coincidencia en el nivel de depuración del iterador en el CRT.

Recompile PCRE en modo de lanzamiento para que coincida con su propia aplicación.

El detect_mismatch pragma en VS 2010 es lo que hace que se emita este error.

Ver http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (búsqueda de _ITERATOR_DEBUG_LEVEL)

17

que tenía el mismo error. En mi caso, la solución es fácil: tenía un proyecto A dependiendo de otro proyecto B. B tenía una definición de preprocesador _DEBUG en modo de depuración y A no.

Simplemente agregue _DEBUG al proyecto A (project-> properties-> C++ -> preprocessor-> preprocessor definitions) y listo.

+2

¡Gracias! O en modo de lanzamiento, es posible que tenga 'NDEBUG' definido en uno y no en el otro. – Derek

2

Mi problema era que el proyecto dependiente utilizaba "Usar conjunto de caracteres de varios bytes"
en Generl -> Juego de caracteres. mientras que otro proyecto tenía "No hay ningún conjunto de" valor

3

Esto también puede ser causada por el ajuste de la definición de preprocesador _HAS_ITERATOR_DEBUGGING=0 en el proyecto B y no en A, donde A produce un lib utilizado por B.