将调试应用程序(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
我用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