C++ LNK2038和x9;检测到';RuntimeLibrary';:价值';MT#U静态版本';不';t匹配值';MTd#U静态调试';在xxx.obj中

C++ LNK2038和x9;检测到';RuntimeLibrary';:价值';MT#U静态版本';不';t匹配值';MTd#U静态调试';在xxx.obj中,c++,visual-studio,visual-c++-runtime,C++,Visual Studio,Visual C++ Runtime,我正在使用VS2017以调试模式构建应用程序。我已经在它所依赖的发布模式下构建了第三方库,并提供了链接。这是允许的还是报告错误的原因 LNK2038 mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in xxx.obj my-application <path-to>\libboost_filesystem-mt-s.li

我正在使用VS2017以调试模式构建应用程序。我已经在它所依赖的发布模式下构建了第三方库,并提供了链接。这是允许的还是报告错误的原因

LNK2038 mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MTd_StaticDebug' in xxx.obj   my-application  <path-to>\libboost_filesystem-mt-s.lib(path_traits.obj) 1   
检测到“RuntimeLibrary”的LNK2038不匹配:值“MT_StaticRelease”与xxx.obj my application\libboost_filesystem-MT-s.lib(path_traits.obj)1中的值“MTd_StaticDebug”不匹配 页面说明:

运行时图书馆 指示应用程序或库使用的C++标准库和C运行库的版本。使用C++标准库或C运行库的一个版本的代码与使用不同版本的代码不兼容。有关更多信息,请参阅/MD、/MT、/LD(使用运行时库)

我理解DLL运行库不能与非DLL库混合使用。对于调试库和发布库也是这样吗


我在Linux上做同样的事情没有遇到任何问题。

是的,调试和发布库也是如此。你不能混用。为什么要投否决票?你不能混用调试和发布,而且你还应该注意,Visual Studio 2017仅与2015兼容。所有其他版本都不兼容。这意味着它们在标准库实现中会有差异,它们会有不同的CRT。如果在一个CRT中分配内存并在另一个CRT中释放内存,则后一个问题可能会导致堆损坏。MSFT CRT库的背面兼容性不如linux,使用了并排方式,但最近引入了ucrt,这可能会改善这种情况。对于具有第三方库的项目,建议请求第三方提供使用/MT构建的二进制文件,这可能会减少由不同VS版本和调试/发布配置引起的链接问题。这是否回答了您的问题?