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

Posted

技术标签:

【中文标题】错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“2”与 XX.obj 中的值“0”不匹配【英文标题】:Error LNK2038 : mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in XX.obj 【发布时间】:2021-01-26 02:01:12 【问题描述】:

我对 c++ 非常陌生,并且在尝试构建我的 c++ OpenGL 项目的发布版本时遇到此错误。经过一番谷歌搜索后,我将 C/C++ > 代码生成 菜单中的运行时库更改为 Multi-Threaded Debug GLL (/MDd),然后解决了问题.我想知道这样做是否正确。

我新建了一个空项目作为测试,Release模式下默认的Runtime Library设置是Multi-Threaded (/MD)。调试模式的默认运行时库是多线程调试 (/MDd)。尽管有不同的运行时库,但两个配置都成功构建,这让我想知道我的项目设置是否在某个时候出现了混乱。

另一个让我好奇的细节是尝试在 Release x64 中构建时的输出日志:

D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\LoggerFactory.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\ConsoleAndFileLogger.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Component.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Physics.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Rotator.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\IEntitySpawnHandler.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\SpaceScene.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\ActionManager.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\DeviceManager.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Device.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Mouse.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\MouseAxis.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\MouseButton.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\InputAction.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\InputAxis.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Scene.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\GUI.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\GLFWKeyboardKeyData.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Keyboard.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\GLFWPCInputDeviceFactory.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Random.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\IndexBuffer.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Main.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Material.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Mesh.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\OpenGLUtilities.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Square.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Shader.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\ShaderManager.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\VertexArray.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\VertexBuffer.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\SceneManager.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Singleton.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\glm.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\imgui.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\imgui_demo.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\imgui_draw.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\imgui_impl_glfw_gl3.obj
**D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\x64\Release\Window.obj
**D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Camera.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Color.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Debug.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\ObjectRenderer.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Entity.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\SpaceShip.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Star.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Input.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\KeyboardKey.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Math.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Renderer.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Time.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Transform.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Vector2.obj
D:\Documents\_Projects_FAT\Gios_OpenGL\bin\intermediates\Win32\Debug\Vector3.obj

我突出显示了中间文件路径从 bin\x64\Release 更改为 bin\intermediates\Win32\Debug 的两行,我想知道这是否有助于解决这个问题。

【问题讨论】:

/MDd 对于发布模式应用程序不正确。 在项目设置中的某处,您的项目中包含错误的 obj 文件或错误的库。 能否请您尝试share a reproducible sample与我们一起帮助我们在我们身边重现。也许有一个项目选项是您错误设置的。输入项目属性--> Configuration Properties -->C/C++ --> Preprocessor --> Preprocessor Definitions 然后在该命令上添加_ITERATOR_DEBUG_LEVEL=0 @PerryQian-MSFT 这是this repo 中的项目。我使用 2 个外部库:GLFW 和 GLEW 【参考方案1】:

虽然不是一个完美的解决方案,但我最终创建了一个新项目并一个接一个地重新导入所有依赖项,在两者之间进行编译以尝试查找问题。导入所有库后,新项目就可以工作了。然后我复制了我所有的代码并在新的解决方案中编译它,它有效,所以问题已经解决了。

我在两个项目文件之间保存了diff,但找不到问题(它们太不同了,我无法理解)。也许有更多经验的人可以弄清楚。

【讨论】:

既然您有解决方法,我建议您可以mark your own answer 帮助其他社区成员获得提示。 @PerryQian-MSFT 完成!我担心我只能标记一个答案,并希望其他人有更好的解决方案,但我想我可以在需要时更改答案

以上是关于错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”不匹配:值“2”与 XX.obj 中的值“0”不匹配的主要内容,如果未能解决你的问题,请参考以下文章

VS10异常.[_ITERATOR_DEBUG_LEVEL][_HAS_ITERATOR_DEBUGGING]

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

在 VS 2012 (C++) 中编译 Visual Studio 2010 项目:错误 LNK2038:检测到“_MSC_VER”不匹配:值“1600”与值“1700”不匹配

error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“MD_DynamicRelease”

LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 file.obj 中的值“MD_DynamicRelease”不匹配

LNK2038, LNKC4743,LNK4098,LNK2001