【问题标题】:Linking debug application (MDd runtime library) with a release static library (MD runtime library)将调试应用程序(MDd 运行时库)与发布静态库(MD 运行时库)链接
【发布时间】:2021-04-19 18:12:57
【问题描述】:

我使用 Visual Studio 2017 打开 cmake 项目。我有一个使用 MDd 运行时库的调试应用程序 - CMAKE_CXX_FLAGS_DEBUG:/MDd /Zi /Ob0 /Od /RTC1。当我尝试链接到发布静态库(MD 运行时)时,出现以下错误:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in main.cpp.obj
error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MD_DynamicRelease' doesn't match value 'MDd_DynamicDebug' in main.cpp.obj

我可以构建一个调试静态库(MDd 运行时库)并链接到它,但我想知道该问题是否有任何解决方法?

【问题讨论】:

  • “我想知道这个问题是否有任何解决方法?” - 您要求什么样的“解决方法”?您不能将可执行文件与具有不同 CRT 设置的库链接。没门。参见例如那个问题:stackoverflow.com/questions/14714877/….

标签: cmake visual-studio-2017 linker linker-errors static-linking


【解决方案1】:

我有一个使用 MDd 运行时库的调试应用程序

/MDd 表示您的应用程序正在使用“调试多线程特定和DLL-特定版本的运行-时间图书馆”。

当我尝试链接到发布静态库(MD 运行时)时

/MD 表示该库正在使用“多线程特定和 DLL-特定版本的运行时图书馆”。那是不是发布静态 ",该库正在使用 CRT 的 DLL 版本,并且该 CRT 与您的应用程序共享。这需要调试与发布选项在应用程序构建和库构建之间匹配,并且没有可能的方法来规避它。从文档页面:

传递给给定链接器调用的所有模块都必须使用 相同的运行时库 编译器选项进行编译

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多