错误LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值'0'与main.obj中的值'2'不匹配

Qbu*_*nia 120 c++ debugging linker

我已经阅读了很多我的问题的解决方案但没有帮助.我试过干净,重建.重新安装了视觉2010并从专业变为终极.但我仍然不知道为什么我有这个错误.我的项目看起来像这样:1个Exe解决方案来测试我的静态库.1 Dll Solution静态库.转换为dll的代码使用名为ClassificationFramework的1 lib函数.我提供这个lib作为头和cpp基本上是源代码.在Exe解决方案中,我链接了我生成的库+其他一些库来运行它+ ClassificationFramework.dll.当我使用Release时,一切正常,但是当我改为Debug时(因为我想调试一些东西,我厌倦了在发布模式下跳过调试器)我得到了这个:

    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
Run Code Online (Sandbox Code Playgroud)

当我构建版本时,我也收到了以下警告:

    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
Run Code Online (Sandbox Code Playgroud)

我发现调试器由于错误的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).
Run Code Online (Sandbox Code Playgroud)

当我进入Debug-> Windows-> Modules时,我发现他找不到那些pdb文件或其他东西.我怎么能说他这些文件在这里和这里?我试图以管理员身份运行MSvisual,但这也没有帮助.我使用microsoft服务器加载pdb文件,但也没有帮助.

AJG*_*G85 142

在VS2010中,迭代器调试级别在调试中默认为2,在发布时禁用.您使用的其中一个dll可能在调试中关闭了迭代器调试,因为它是在较旧版本的visual studio中构建的,或者它们明确地将定义添加到项目中.

搜索_ITERATOR_DEBUG_LEVEL_SECURE_SCL删除它们或在所有项目和源中适当地设置它们并重建所有内容.

_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)
Run Code Online (Sandbox Code Playgroud)

简而言之,您可能正在混合发布和调试dll.不要在调试中链接发行版dll,反之亦然!

  • "简而言之,你可能正在混合发布和调试dll"帮助我.谢谢! (36认同)
  • 我没有在任何.h或.cpp文件中看到任何_ITERATOR_DEBUG_LEVEL或_SECURE_SCL它们只存在于obj文件中:/ FAILIFMISMATCH:"_ ITERATOR_DEBUG_LEVEL = 0"怎么样 (6认同)
  • 怀威威!你的意思是告诉我,当我使用MSVC时,要获得Debug构建,我必须重新编译所有依赖项吗?即使那些我不在乎调试?什么狗屎!我简直不敢相信! (2认同)

Fra*_*rot 102

我对这个问题进行了一些更新,因为我在将旧的Visual 6项目迁移到Visual Studio 2012之后,今天在一个链接到静态库的应用程序上遇到了同样的错误.

在我的情况下,错误是我错误地使用/ MDd而不是/ MD编译静态库的发行版本,而应用程序是/ MD发布.在静态lib项目中设置正确的/ MD解决了这个问题.

这是在项目属性中完成的

  • 在树中选择Configuration Properties/C C++/Code Generation
  • 并且选项Runtime Library在所有依赖项目和应用程序上设置为相同.


Ant*_*ano 19

如果您希望将Release中的项目A与Debug中的另一个项目B有目的地联系起来,那么为了在调试时保持应用程序的整体性能优势,那么您可能会遇到此错误.您可以通过临时修改项目B的预处理程序标志来禁用迭代器调试(并使其与项目A匹配)来解决此问题:

在项目B的"调试"属性,配置属性 - > C/C++ - >预处理器中,将以下内容添加到预处理器定义:

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

在Debug中重建项目B,然后在Release中构建项目A,它应该正确链接.


Avi*_*hek 10

将调试版本和发布版本混合在同一个可执行文件或dll中可能会导致错误.

  1. 在vs配置管理器中,您的一些项目是处于调试模式还是一些处于发布模式?
  2. 您的一个发布项目是否已定义预处理器符号DEBUG或_DEBUG?
  3. 您的调试项目之一是否已定义预处理器符号NDEBUG?


小智 10

项目之间的不匹配:一个是多字节字符集,另一个是Unicode.纠正这些以达成一致同意Unicode纠正了这个问题.

  • 事实证明,我试图构建的项目存在此问题,并且在调试中意外丢失了预处理器:_DEBUG。见 http://forums.codeguru.com/showthread.php?519376-mismatch-detected-for-_ITERATOR_DEBUG_LEVEL-value-0-doesn-t-match-value-2&p=2050461#post2050461 (2认同)

Art*_*are 7

我也有这个问题.

我的问题是我从我的调试配置中复制/粘贴了库包含目录.

因此项目"Indep"包括来自"../Debug"的静态库"Dep.lib",即使在发布中也是如此.修复是将库目录更改为"../Release",因此我捕获了发布版本的库,而不是之前构建的调试库.


And*_*rey 6

最后一次机会(如果其他方法不起作用):在所有项目中定义 _ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH 宏。它将禁用 CRT 标头中使用的“#pragma detect_mismatch”功能。

  • 我尝试了该页面上的几乎所有内容,这是唯一有效的。在“C/C++ >> Preprocessor >> PreprocessorDefinitions”下添加“_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH”。 (2认同)

小智 6

我在调试库和发布库之间遇到了同样的问题。错误出在解决方案属性/配置属性/配置中。

项目配置与主要配置/平台不匹配。


Ale*_*exT 5

尝试在 C++ 项目属性中将 _DEBUG 更改为 NDEBUG 宏定义(对于发布配置)配置属性 -> C/C++ -> 预处理器 -> 预处理器定义