【问题标题】:mismatch detected for `RuntimeLibrary` : value 'MD_DynamicRelease` doesn't match value `MTd_Static debug` in application obj为“RuntimeLibrary”检测到不匹配:值“MD_DynamicRelease”与应用程序 obj 中的值“MTd_Static debug”不匹配
【发布时间】:2020-12-13 18:51:29
【问题描述】:

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

我之前遇到过这个错误,但是将所有静态库和 .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 linker-errors


    【解决方案1】:

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

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

    可能的原因:

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

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

    【讨论】:

    • 我相信他们都在同一个配置中:/
    • 解决了。我有所有项目的多个 sln 文件。因此,在单独构建时,miniEngine 在它自己的调试文件夹中创建了一个 lib 文件,并且该文件夹与所有 lib 文件所在的目录一起链接。所以多重链接导致了这个错误
    猜你喜欢
    • 2019-04-17
    • 2015-05-07
    • 2021-01-29
    • 1970-01-01
    • 2013-01-20
    • 2016-12-30
    • 2013-11-03
    • 2023-01-30
    相关资源
    最近更新 更多