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


131

我已经阅读了很多解决我的问题的方法,但是都没有帮助。我尝试清洁,重建。重新安装了Visual 2010,并从专业版更改为最终版。但是我仍然不知道为什么会有这个错误。我的项目如下所示:1 Exe解决方案,用于测试我的静态库。1 Dll解决方案静态库。转换为dll的代码使用的是来自1个lib的函数,称为ClassificationFramework。我将此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

在构建发行版时,我还收到以下警告:

    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

我发现由于到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).

当我转到Debug-> Windows-> Modules时,我看到他找不到那些pdb文件或其他东西。我怎么说他这些文件在这里和这里?我试图以管理员身份运行MSvisual,但这也无济于事。我使用Microsoft服务器加载pdb文件,但也没有帮助。

Answers:


148

在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)

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


6
我没有在任何.h或.cpp文件中看到任何_ITERATOR_DEBUG_LEVEL或_SECURE_SCL它们仅存在于obj文件中,例如:/ FAILIFMISMATCH:“ _ ITERATOR_DEBUG_LEVEL = 0”怎么样
Qbunia,2011年

发行版中的调试器跳过断点怎么办?一些断点没有填充,并且说调试器由于优化或链接这样的东西而避免了它们
Qbunia 2011年

42
“总之,您可能正在混合发行和调试dll”,这对我有所帮助。谢谢!
2013年

2
Waiwaiwait!您的意思是告诉我,当我使用MSVC时,要获得Debug版本,我必须重新编译所有依赖项?甚至那些我都不愿意调试的东西?该死的男人!我真不敢相信!
迈克尔

1
“总之,您可能正在混合发行和调试dll”->就我而言,RuntimeLibrary在发行版本中应为MultiThreadedDLL时是MultiThreadedDebugDLL。
船长正常

108

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

就我而言,错误是我错误地使用/ MDd而不是/ MD编译了静态库的Release版本,而应用程序是release中的/ MD。在静态lib项目中设置正确的/ MD可以解决此问题。

这是在项目属性中完成的

  • 在树中选择配置属性/ C C ++ /代码生成
  • 并且所有依赖项项目和应用程序上的选项“ 运行时库”都设置为相同。

21

如果您想要有针对性地将Release中的项目A与Debug中的另一个项目B链接起来,比如说要在调试时保持应用程序的整体性能优势,那么您很可能会遇到此错误。您可以通过临时修改项目B的预处理器标志以禁用迭代器调试(并使它与项目A匹配)来解决此问题:

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

_HAS_ITERATOR_DEBUGGING = 0; _ITERATOR_DEBUG_LEVEL = 0;

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


11

我在两个项目之间存在不匹配:一个项目使用多字节字符集,另一个项目使用Unicode。更正这些内容以就Unicode达成共识,从而解决了该问题。


2
事实证明,我要构建的项目存在此问题,以及调试中意外缺少的预处理器:_DEBUG。参见forums.codeguru.com/…– JGeerWM 2014
17:03

我在Matlab中遇到了类似的混合问题,但是反过来:我需要将VS2013构建更改为多字节以获取协议。这也解决了RuntimeLIbrary的不匹配问题。
barnhillec

10

该错误可能是由于将调试版本和发布版本混合在同一可执行文件或dll中引起的。

  1. 在vs配置管理器中,您的某些项目是否处于调试模式而某些处于释放模式?
  2. 您的发行项目之一是否定义了预处理器符号DEBUG或_DEBUG?
  3. 您的调试项目之一是否定义了预处理器符号NDEBUG?

7

我也有这个问题。

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

因此项目“ Indep”甚至包括发行版中的“ ../Debug”静态库“ Dep.lib”。解决的方法是将库目录更改为“ ../Release”,因此我捕获了发行版构建的库,而不是先前构建的调试库。


遇到类似的问题,无论释放还是调试,我的静态库都位于同一位置。在这种情况下,应通过在其后加上“ d”等不同名称。否则,每次在调试/发行版之间切换时,您也将不得不重新构建库。
yau 2013年

4

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

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


3

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


3

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


我在此页面上尝试了几乎所有内容,这是唯一有效的方法。_ALLOW_ITERATOR_DEBUG_LEVEL_MISMATCH在下添加C/C++ >> Preprocessor >> PreprocessorDefinitions
Contango '16

2

opencv_core245.lib(dxt.obj):错误LNK2038:针对“ _ITERATOR_DEBUG_LEVEL”检测到不匹配:test.obj中的值“ 0”与值“ 2”不匹配我得到了这样的错误。
我在链接器->输入->其他Dependenc中有opencv_core245.lib和opencv_core245d.lib。由于这两个存在冲突,因此我删除了第一个opencv_core245.lib。错误消失了。


2

试试这个:Goto项目属性-> C / C ++->代码生成->运行时库从组合框值中选择:多线程DLL(/ MD)对我有用:)


2

就我而言,对于Debug和Release,解决方案是先清理然后重新构建整个解决方案。

编辑:我的情况也是如此(VS2017)步骤1:清理项目。步骤2:更改配置模式(从调试到发行,反之亦然)。第三步:清理项目。步骤4:以所需的配置模式构建。

PS:要更改配置模式,请在构建菜单下找到配置设置


1

我今天(VS2010)遇到了同样的问题,我建立了Release | Win32,然后尝试构建Debug | Win32,并收到此消息。

我试过清理Debug | Win32,但错误仍然存​​在。然后我清理了Release | Win32,然后清除Debug | Win32,然后构建良好。


1

通过在项目属性->链接器->输入->其他依赖关系(VC10)中将依赖关系库更改为调试版本,我设法摆脱了该错误(在我的情况下使用Ogre3D + Bullet)。

我将BulletCollision.lib更改为BulletCollision_debug.lib(用于调试配置)并进行了编译。


1

我解决了更正“附加库目录”的麻烦,这在指示“ $(SolutionDir)\ Release”中是错误的,我在“ $(SolutionDir)\ $(IntDir)”中进行了更改

要更正它,请打开项目属性->配置属性->链接器->常规->其他库目录

我希望这会帮助一些同样麻烦的人;)


所以对我来说,Debug可以正常运行,但是在发行版中出现上述错误...。这里?
sqp_125

0

我也遇到这个问题,之所以出现这个问题,是因为我重新制作了该项目,然后忘记了通过依赖项目中的引用将其重新链接。

因此,它通过引用链接到旧项目,而不是新项目。

重要的是要知道在通过引用重新添加以前链接的项目时存在错误。您必须手动删除vcxproj中的引用,然后才能重新添加它。根据msdn,这是Visual Studio中的一个已知问题。


0

我有类似的问题,但是错误的设置是在extern .lib文件中,该文件我没有源。如果您没有源文件,最简单的解决方法是仅更改.lib文件的内容。

在编辑器中打开.lib文件(我使用PSPad,也可以使用bud Windows记事本),并将所有出现的_ITERATOR_DEBUG_LEVEL = 2替换为_ITERATOR_DEBUG_LEVEL = 0


0

在我的情况下,“预处理器定义”中的NDEBUG宏定义需要更改为_DEBUG。我正在构建用于.exe的静态库,该库抱怨问题中列出的相同错误。转到“配置属性”(“项目”菜单,“属性”菜单项),然后依次单击“ C / C ++”部分,其下的“预处理器”部分,然后编辑“预处理器定义”,以便将NDEBUG更改为_DEBUG(以匹配在exe中设置)。


0

像所有其他答案一样,我检查了Configuration Properties -> C/C++ -> Preprocessor指令。
就我而言,我NDEBUG在Release中定义正确,但是我也有:_SECURE_SCL=1

删除那个解决了问题。


-1

除了上面的帮助之外,还有一些小改进:在使用VST 2017将静态lib添加到较旧的VST解决方案后,出现了不匹配错误。VST现在为包含以下两行的预编译头生成“ stdfax.h”:

// Turn off iterator debugging as it makes the compiler very slow on large methods in debug builds
#define _HAS_ITERATOR_DEBUGGING 0
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.