c++ - error LNK2038: desajuste detectada para ''_ITERATOR_DEBUG_LEVEL'': el valor ''0'' no coincide con el valor ''2'' en main.obj
debugging linker (19)
Última oportunidad (si otras formas no funcionan): defina la macro _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH en todos los proyectos. Deshabilitará la función "#pragma detect_mismatch" que se utiliza en los encabezados CRT.
He leído muchas soluciones a mi problema, pero ninguna me ayudó. Intenté limpiar, reconstruir. Se reinstaló Visual 2010 y se cambió de profesional a definitivo. Pero aún no sé por qué tengo este error. Mi proyecto se ve así: 1 Exe Solution para probar mi biblioteca estática. 1 biblioteca Dll Solution estática. El código que se convierte en dll usa la función de 1 lib llamada ClassificationFramework. Proporcioné esta lib como encabezados y cpp, básicamente código fuente. En la solución Exe, vinculé mi biblioteca generada + algunas otras bibliotecas para ejecutarlo + ClassificationFramework.dll. Todo funciona bien cuando uso Release, pero cuando cambio a Debug (porque quiero depurar algunas cosas, estoy cansado de omitir el depurador en el modo de lanzamiento) obtengo esto:
2>Link:
2> ClassificationFramework.lib(SampleClass.obj) : MSIL .netmodule or module compiled with /GL found; restarting link with /LTCG; add /LTCG to the link command line to improve linker performance
2>ClassificationFramework.lib(SampleClass.obj) : error LNK2038: mismatch detected for ''_ITERATOR_DEBUG_LEVEL'': value ''0'' doesn''t match value ''2'' in main.obj
2>ClassificationFramework.lib(SampleNamesSet.obj) : error LNK2038: mismatch detected for ''_ITERATOR_DEBUG_LEVEL'': value ''0'' doesn''t match value ''2'' in main.obj
2>ClassificationFramework.lib(SampleSet.obj) : error LNK2038: mismatch detected for ''_ITERATOR_DEBUG_LEVEL'': value ''0'' doesn''t match value ''2'' in main.obj
2>ClassificationFramework.lib(DirectoryReader.obj) : error LNK2038: mismatch detected for ''_ITERATOR_DEBUG_LEVEL'': value ''0'' doesn''t match value ''2'' in main.obj
2>LINK : warning LNK4098: defaultlib ''MSVCRT'' conflicts with use of other libs; use /NODEFAULTLIB:library
2>C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Debug/Tester.exe : fatal error LNK1319: 4 mismatches detected
Cuando construyo en Release I también recibí estas advertencias:
1>Link:
1> Generating code
1>c:/program files (x86)/microsoft visual studio 10.0/vc/include/utility(101): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because ptimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/directoryreader.cpp(30): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/program files (x86)/microsoft visual studio 10.0/vc/include/xstring(1589): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/samplenamesset.cpp(226): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/directoryreader.cpp(60): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/samplenamesset.cpp(199): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/sampleset.cpp(27): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1>c:/users/kasia/documents/visual studio 2010/projects/classificationframework/classificationframework/samplenamesset.cpp(59): warning C4748: /GS can not protect parameters and local variables from local buffer overrun because optimizations are disabled in function
1> Finished generating code
1>ClassificationFramework.lib(SampleSet.obj) : warning LNK4099: PDB ''vc100.pdb'' was not found with ''ClassificationFramework.lib(SampleSet.obj)'' or at ''C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Release/vc100.pdb''; linking object as if no debug info
1>ClassificationFramework.lib(SampleNamesSet.obj) : warning LNK4099: PDB ''vc100.pdb'' was not found with ''ClassificationFramework.lib(SampleNamesSet.obj)'' or at ''C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Release/vc100.pdb''; linking object as if no debug info
1>ClassificationFramework.lib(SampleClass.obj) : warning LNK4099: PDB ''vc100.pdb'' was not found with ''ClassificationFramework.lib(SampleClass.obj)'' or at ''C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Release/vc100.pdb''; linking object as if no debug info
1>ClassificationFramework.lib(DirectoryReader.obj) : warning LNK4099: PDB ''vc100.pdb'' was not found with ''ClassificationFramework.lib(DirectoryReader.obj)'' or at ''C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Release/vc100.pdb''; linking object as if no debug info
1> Tester.vcxproj -> C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Transformer/Release/Tester.exe
Descubrí que el Depurador se salta debido a la ruta incorrecta a los archivos pdb.
''Tester.exe'': Loaded ''C:/Documents and Settings/Administrator/My Documents/Visual Studio 2010/Projects/Work/Release/Tester.exe'', Symbols loaded.
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/kernel32.dll'', Cannot find or open the PDB file
''Tester.exe'': Unloaded ''C:/WINDOWS/SysWOW64/kernel32.dll''
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/ntdll.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/kernel32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/OpenCV2.2/bin/opencv_core220.dll'', Binary was not built with debug information.
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/msvcp100.dll'', Symbols loaded.
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/msvcr100.dll'', Symbols loaded.
''Tester.exe'': Loaded ''C:/OpenCV2.2/bin/opencv_highgui220.dll'', Binary was not built with debug information.
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/user32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/gdi32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/advapi32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/rpcrt4.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/secur32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/ole32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/msvcrt.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/WinSxS/x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_5.82.3790.4770_x-ww_A689AB02/comctl32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/avifil32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/winmm.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/msacm32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/msvfw32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/shell32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/shlwapi.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/avicap32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/version.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/OpenCV2.2/bin/opencv_imgproc220.dll'', Binary was not built with debug information.
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/imm32.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/lpk.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/SysWOW64/usp10.dll'', Cannot find or open the PDB file
''Tester.exe'': Loaded ''C:/WINDOWS/WinSxS/wow64_Microsoft.Windows.Common- Controls_6595b64144ccf1df_6.0.3790.4770_x-ww_8D2E3180/comctl32.dll'', Cannot find or open the PDB file
The program ''[4984] Tester.exe: Native'' has exited with code 0 (0x0).
Cuando voy a Depurar-> Windows-> Módulos veo que no puede encontrar esos archivos pdb o algo así. ¿Cómo puedo decirle que esos archivos están aquí aquí y aquí? Traté de ejecutar MSvisual como administrador, pero eso tampoco me ayudó. Utilicé el servidor de Microsoft para cargar archivos pdb pero tampoco ayudé.
Al igual que todas las otras respuestas, revisé mis Configuration Properties -> C/C++ -> Preprocessor
Directivas de Configuration Properties -> C/C++ -> Preprocessor
.
En mi caso, tenía el NDEBUG
definido correctamente en Release, pero también tenía: _SECURE_SCL=1
.
Eliminar eso solucionó el problema.
El error puede deberse a la combinación de compilaciones de depuración y versiones de lanzamiento en el mismo ejecutable o dll.
- en el administrador de configuración vs, ¿algunos de sus proyectos están en modo de depuración y algunos en modo de lanzamiento?
- ¿Uno de sus proyectos de lanzamiento tiene definido el símbolo preprocesador DEBUG o _DEBUG?
- ¿Uno de sus proyectos de depuración tiene definido el símbolo preprocesador NDEBUG?
En VS2010, el nivel de depuración del iterador está predeterminado en 2 en depuración y está deshabilitado en la versión. Uno de los dlls que está utilizando probablemente tiene la depuración del iterador desactivada en la depuración, ya sea porque se creó en una versión anterior de Visual Studio o se agregaron explícitamente las definiciones al proyecto.
Busque _ITERATOR_DEBUG_LEVEL
y _SECURE_SCL
elimínelos o _SECURE_SCL
adecuadamente en todos los proyectos y fuentes y reconstruya todo.
_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)
En resumen, probablemente esté mezclando versiones y depuración dlls. ¡No enlaces dlls de lanzamiento en depuración o viceversa!
En mi caso, la definición de la macro NDEBUG en las "Definiciones del preprocesador" debía cambiarse a _DEBUG. Estoy construyendo una biblioteca estática para su uso en un .exe que se quejaba del mismo error enumerado en la pregunta. Vaya a Propiedades de configuración (menú "Proyecto", elemento de menú "Propiedades") y luego haga clic en la sección C / C ++, luego en la sección Preprocesador debajo de eso, y luego edite las Definiciones de preprocesador para que NDEBUG cambie a _DEBUG (para que coincida con estableciendo en el exe).
En mi caso, tanto para Debug como para Release, la solución fue limpiar y luego reconstruir toda la solución.
Hago una pequeña actualización sobre este tema, ya que hoy tuve el mismo error en una aplicación que se vincula con una lib estática, después de que migré el antiguo proyecto de Visual 6 a Visual Studio 2012.
En mi caso, el error fue que compilé por error la versión de lanzamiento de la lib estática con / MDd en lugar de / MD , mientras que la aplicación está / MD en versión. Establecer el / MD correcto en el proyecto de lib estático resolvió el problema.
Esto se hace en las propiedades del proyecto
- Seleccione Propiedades de configuración / C C ++ / Generación de código en el árbol
- y la opción Runtime Library establecida en la misma en todos sus proyectos y aplicaciones de dependencias.
Hoy tuve el mismo problema (VS2010), construí Release | Win32, luego intentó construir Debug | Win32, y recibí este mensaje.
Intenté limpiar Debug | Win32 pero el error aún persiste. Luego limpié Release | Win32, luego limpió Debug | Win32, y luego lo construyó bien.
Logré deshacerme de este error (en mi caso usando Ogre3D + Bullet) cambiando las bibliotecas de dependencias a las versiones de depuración en Propiedades del proyecto -> Enlazador -> Entrada -> Dependencias Adicionales (VC10).
Cambié BulletCollision.lib a BulletCollision_debug.lib (para configuración de depuración) y compilé.
Pequeña adición a la ayuda anterior: obtuve el error de desajuste después de agregar una libto estática a una solución VST anterior usando VST 2017. VST ahora genera "stdfax.h" para los encabezados precompilados que contienen estas 2 líneas: // Desactiva la depuración del iterador, ya que hace que el compilador sea muy lento en los métodos grandes en las compilaciones de depuración
define _HAS_ITERATOR_DEBUGGING 0
. Comenté el #define para corregir el error de desajuste. (El desbordamiento de pila de PS está reformateando esto de manera extraña)
Pruebe cambiar _DEBUG a definición de macro NDEBUG en propiedades de proyecto C ++ (para la configuración de Release) Propiedades de configuración -> C / C ++ -> Preprocesador -> Definiciones de preprocesador
Pruebe esto: Ir a la propiedad del proyecto -> C / C ++ -> Generación de código -> Biblioteca de tiempo de ejecución Seleccionar de un valor de combobox: DLL de subprocesos múltiples (/ MD) Funciona para mí :)
Resolví mi problema al corregir el "Directorio de biblioteca adicional", este fue incorrecto al indicar "$ (SolutionDir) / Release", lo cambié en "$ (SolutionDir) / $ (IntDir)"
Para corregirlo, abra las propiedades de su proyecto -> Propiedades de configuración -> Enlazador -> General -> Directorio de biblioteca adicional
Espero que esto ayude a algunos poetas con el mismo problema;)
Si desea vincular intencionadamente su proyecto A en Release contra otro proyecto B en Debug, por ejemplo para mantener los beneficios de rendimiento general de su aplicación durante la depuración, es probable que llegue a este error. Puede solucionar esto modificando temporalmente los indicadores del preprocesador del proyecto B para desactivar la depuración del iterador (y hacer que coincida con el proyecto A):
En las propiedades "Depurar" del Proyecto B, Propiedades de Configuración -> C / C ++ -> Preprocesador, agregue lo siguiente a las Definiciones del Preprocesador:
_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;
Reconstruya el proyecto B en Debug, luego construya el proyecto A en Release y este debería enlazarse correctamente.
También tuve este problema y surgió porque rehice el proyecto y luego olvidé volver a vincularlo por referencia en un proyecto dependiente.
Por lo tanto, estaba vinculando por referencia al proyecto anterior en lugar del nuevo.
Es importante saber que hay un error al volver a agregar un proyecto previamente vinculado por referencia. Tienes que eliminar manualmente la referencia en vcxproj y solo entonces puedes volver a agregarla. Este es un problema conocido en Visual Studio según msdn.
Tenía una falta de coincidencia entre los proyectos: uno con conjunto de caracteres de múltiples bytes, y el otro con Unicode. Corregir estos para acordar Unicode corrigió el problema.
Tuve un problema similar, pero la configuración incorrecta estaba en el archivo externo .lib del que no tenía fuentes. Si no tiene los archivos fuente , la solución más simple es simplemente cambiar el contenido del archivo .lib.
Abra el archivo .lib en un editor (utilicé PSPad, también es posible el bloc de notas de Windows) y reemplace todas las ocurrencias de _ITERATOR_DEBUG_LEVEL = 2 a _ITERATOR_DEBUG_LEVEL = 0
Yo tuve este problema también.
Mi problema era que había copiado / pegado la biblioteca, incluidos los directorios de mis configuraciones de depuración.
Así que el proyecto "Indep" incluía la biblioteca estática "Dep.lib" de "../Debug", incluso en versión. La solución fue cambiar el directorio de la biblioteca a "../Release", así que cogí la biblioteca desarrollada en el release en lugar de la biblioteca de depuración creada previamente.
opencv_core245.lib (dxt.obj): error LNK2038: desajuste detectado para ''_ITERATOR_DEBUG_LEVEL'': el valor ''0'' no coincide con el valor ''2'' en test.obj Recibí un error como este.
Tengo opencv_core245.lib y opencv_core245d.lib en Linker-> Input-> Additional dependenc. Como estos dos eran confusos, eliminé el primero, opencv_core245.lib. Error ido.