检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与应用程序对象中的值“MTd_Static调试”不匹配 [重复]

mismatch detected for `RuntimeLibrary` : value 'MD_DynamicRelease` doesn't match value `MTd_Static debug` in application obj [duplicate]

提问人:Skiggz 提问时间:8/25/2020 最后编辑:Skiggz 更新时间:8/25/2020 访问量:4765

问:

我在我的项目中一直遇到这个错误。 该项目有许多子项目,子项目部署为静态库。

我以前遇到过这个错误,但是将所有静态库和 .exe 的运行时库配置为相同将帮助我摆脱它。大多数错误都消失了,但即使所有项目的配置都相同,其中一个静态库也会抛出此错误。

错误说

Error   LNK2038 mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MTd_StaticDebug' in application.obj  flRenderServer  D:\Projects\FLProject\RenderBox\singlegame_renderbox\Production\FantasticLeague\_Code\FLeague\flRenderServer\miniEngine.lib(miniEngine.obj) 1   

这是相似的

Severity    Code    Description Project File    Line    Suppression State
Error   LNK2038 mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in application.obj flRenderServer  D:\Projects\FLProject\RenderBox\singlegame_renderbox\Production\FantasticLeague\_Code\FLeague\flRenderServer\miniEngine.lib(miniEngine.obj) 1   

除此之外,没有其他库给出任何错误。 任何帮助将不胜感激,谢谢:)

C++ Visual-Studio Qt DLL 链接器错误

评论

0赞 0xC0000022L 11/15/2023
有趣的是,这个“副本”在答案()中包含的信息比据称是重复的问题的任何答案都多......或悲伤,取决于一个人的观点。/failifmismatch

答:

7赞 phlipsy 8/25/2020 #1

如果静态库和可执行文件本身使用不同的配置进行编译,通常会发生这种情况。在您的情况下,似乎是在调试配置中编译的,而您的可执行文件是在发布配置中编译的。有时,迭代器调试级别由项目属性中的预处理器定义直接设置。的值受编译器标志和 的影响。miniEngine#define _ITERATOR_DEBUG_LEVEL ...RuntimeLibrary/MD[d]/MT[d]

详:如果对象文件包含链接器指令,并且链接对象文件之间存在某些不匹配,则链接器会发出错误。可以使用 列出对象文件的链接器指令。这些指令通常由某些头文件中的一行设置。该值取决于生成对象文件时所使用的特定配置。这些指令试图确保不会将不兼容的目标文件链接在一起。例如,在调试模式下编译的目标文件可能要求某些标准类(如迭代器)采用不同的类布局。LINK2038/FAILIFMISMATCH:<Name>=<Value><Value><Name>dumpbin /DIRECTIVES <object-file>#pragma detect_mismatch("<Name>", "<Value>")

可能原因:

  • 在静态库的一个源文件中手动定义,但不在可执行文件的任何源文件中,反之亦然#define _ITERATOR_DEBUG_LEVEL
  • 指向静态库调试版本的可执行链接:项目属性中链接器属性中的“其他依赖项”和“其他库目录”中的值将链接器引导至静态库的调试版本。只要可执行文件在调试配置中构建,这就会起作用,但如果在发布配置中构建,就会神奇地中断。
  • 可执行文件或静态库的项目属性中“C/C++ 属性”中的“代码生成属性”中的“运行时库”值被手动设置了不同的不匹配值。

请仔细检查链接的静态库和可执行文件的路径和配置。

评论

0赞 Skiggz 8/25/2020
我相信它们都在同一个配置中:/
1赞 Skiggz 8/25/2020
它解决了。我为所有项目准备了多个 sln 文件。因此,在单独构建时,miniEngine 会在它自己的调试文件夹中创建一个 lib 文件,并且该文件夹与所有 lib 文件所在的目录一起链接。因此,多个链接导致了此错误