Error LNK2038: 在 main.obj 中检测到“_ITERATION_DEBUG_LEVEL”的不匹配: 值“0”与值“2”不匹配

我读了很多解决我问题的方法,但没有一个有用。我试过清理,重建。重新安装的视觉2010年和变化,从专业到最终。但我仍然不知道为什么我有这个错误。 我的项目是这样的: 1个 Exe 解决方案来测试我的静态库。 1 Dll 解决方案静态库。 转换为 dll 的代码使用来自1个名为 ClassficationFramework 的库的函数。我提供了这个库作为头和 cpp,所以基本上是源代码。在 Exe 解决方案中,我链接了我生成的库 + 其他一些库来运行它 + ClassficationFramework.dll。当我使用发布的时候,一切都很好,但是当我切换到 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

当我在 Release 中构建时,我也得到了这些警告:

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

当我去调试-> Windows-> 模块,我看到他不能找到那些 pdb 文件或东西。我怎么能告诉他那些文件就在这里和这里?我试图以管理员的身份运行 MSVisual,但这也没有帮助。我使用微软服务器加载 pdb 文件,但也没有帮助。

248162 次浏览

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

简而言之,你可能混合了发布和调试 dls。不要在调试中链接发布 dls,反之亦然!

错误可能是由于在同一个可执行文件或 dll 中将调试构建和发布构建混合在一起造成的。

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

我有一个项目之间的不匹配: 一个与多字节字符集,其他与 Unicode。纠正这些错误,以便就 Unicode 达成一致,从而纠正了这个问题。

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

在我的例子中,错误在于我错误地用 管理发展局/管理发展局而不是 海事处编译了静态库的发布版本,而应用程序在发布版本中是 海事处。在静态 lib 项目中设置正确的/MD 解决了这个问题。

这是在 项目属性中完成的

  • 在树中选择 配置属性/C C + +/代码生成
  • 以及在所有依赖项目和应用程序上将选项 运行库设置为相同。

我也有这个问题。

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

因此,项目“ Indp”包含了静态库“ Dep.lib”from。.即使是在发布版本中。修复方法是将库目录更改为”。./Release”,因此我捕获了发布构建的库,而不是先前构建的调试库。

我也有这个问题,它的出现,因为我重新制作的项目,然后忘记重新链接它的参考在一个相关的项目。

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

通过引用重新添加先前链接的项目时存在 bug,这一点很重要。您必须手动删除 vcxproj 中的引用,只有这样才能重新添加它。这是一个已知的问题,在视觉工作室根据 msdn。

今天我遇到了同样的问题(VS2010) ,我构建了发布 | Win32,然后尝试构建调试 | Win32,并得到了这个消息。

我尝试清除 Debug | Win32,但错误仍然存在。 然后我清理了 ReleaseWin32,然后清理了 Debug | Win32,然后它构建得很好。

在 C + + 项目属性中尝试 change _ DEBUG 到 NDEBUG 宏定义(用于发布配置) 配置属性-> C/C + +-> 预处理器-> 预处理器定义

我也有类似的问题,但是外部设置错了。我没有来源的 lib 文件。如果使用 没有源文件,最简单的解决方法是只更改。Lib 文件。

打开。在一个编辑器 lib 文件(我使用 PSPad,芽 Windows 记事本也可以) ,并取代所有出现的 _ 迭代器 _ DEBUG _ LEVEL = 2_ 迭代器 _ DEBUG _ LEVEL = 0

Opencv _ core245.Lib (dxt.obj) : error LNK2038: 在 test.obj 中检测到‘ _ ITERATION _ DEBUG _ LEVEL’的不匹配: 值‘0’与值‘2’不匹配。
我在链接器-> 输入-> 附加依赖项中有 opencv _ core245. lib 和 opencv _ core245d. lib。由于这两个相互冲突,我删除了第一个 opencv _ core245. lib。错误消失。

通过将依赖项库更改为 Project Properties-> Linker-> Input-> Add Dependency (VC10)中的调试版本,我设法消除了这个错误(在我的例子中使用的是 Ogre3D + Bullet)。

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

试试这个: Goto project property-> C/C + +-> 代码生成-> Runtime Library 从 combobox 值中选择: 多线程 DLL (/MD) 这对我有用:)

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

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

_HAS_ITERATOR_DEBUGGING=0;_ITERATOR_DEBUG_LEVEL=0;

在调试中重新生成项目 B,然后在发布中生成项目 A,它应该能够正确链接。

最后一次机会(如果其他方法不奏效) : 在所有项目中定义 _ ALLOW _ ITERATION _ DEBUG _ LEVEL _ MISMATCH 宏。它将禁用 CRT 头中使用的“ # 杂注检测 _ 不匹配”功能。

在我的例子中,“预处理器定义”中的 NDEBUG 宏定义需要更改为 _ DEBUG。我正在构建一个静态库,以便在。正在抱怨问题中列出的相同错误的 exe。进入配置属性(“项目”菜单,“属性”菜单项) ,然后单击 c/c + + ,部分,然后在 Preprocessor 部分,然后编辑您的预处理器定义,使 ndeBUG 被更改为 _ DEBUG (以匹配在 exe 中的设置)。

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

移除那个就解决了问题。

在我的案例中,对于 Debug 和 Release,解决方案都是先清理,然后重新构建整个解决方案。

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

PS: 要更改配置模式,请在“生成”菜单下查找配置设置

除了上述帮助之外,还有一个小小的补充: 在使用 VST 2017向旧的 VST 解决方案添加了一个静态 libto 之后,我得到了不匹配错误。 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

我解决了纠正“附加库目录”的问题,这个错误指示“ $(SolutionDir) Release”,我在“ $(SolutionDir) $(IntDir)”中更改了它

要更正它,请打开您的项目属性-> 配置属性-> 链接器-> 常规-> 附加库目录

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

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

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

对我来说,这只是一个属性问题,把 C/C + +/代码生成/MDd 改成 MD 就解决了

同上,我正在将一个发布级别的库链接到一个调试 EXE。

问题的原因: 我已经包括了。在解决方案资源管理器中右键单击“项目”,选择“添加 something 现有项”,然后浏览到。LIB 文件。

解决方案: 改为转到“项目属性”。包括一个不同的。通过将它们添加到列表中,在每个调试和发布中添加 LIB。转到 Linker something Input,并添加。适合于配置的 LIB。