将调试应用程序(MDd 运行时库)与发布静态库(MD 运行时库)链接起来

Linking debug application (MDd runtime library) with a release static library (MD runtime library)

我用Visual Studio2017打开cmake项目。我有一个使用 MDd 运行时库的调试应用程序 - CMAKE_CXX_FLAGS_DEBUG:/MDd /Zi /Ob0 /Od /RTC1。当我尝试 link 发布静态库(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 运行时库)和 link,但我想知道是否有解决该问题的方法?

I have a debug application which uses MDd runtime library

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

When I try to link to a release static library (MD runtime)

/MD 表示库正在使用“多线程特定和 DLL-运行-时间库的特定版本”。即 not a "release static library", 该库使用的是 DLL 版本的 CRT ,并且该 CRT 与您的应用程序共享。这需要调试与发布选项在应用程序构建和库构建之间匹配,并且没有可能的方法来规避这一点。来自文档页面:

All modules passed to a given invocation of the linker must have been compiled with the same run-time library compiler option