我可以将不同的 Visual C++ 运行时与静态库混合使用吗?

Can I mix different Visual C++ runtimes with a static library?

关于这个 Stack Overflow 问题:How bad is it to mix and match Visual C++ runtime DLL files in one process?

我知道在运行时使用不同版本的 MSVCR 可能会导致堆损坏。

但是让我们想象一下下面这种行不通的情况:

然后我有以下依赖方案:

Exe +--> libA ---> MSVCR71
    +--> MSVCR100

也就是说,我知道我不应该做的事情!

但是如果现在,我将 libA 编译为静态库,使用任何 Visual Studio 使用 MSVCR71 并编译我的程序 Exe,使用 libA 使用 Visual Studio 使用 MSCVR100.

那么我会有以下方案:

Exe(lib A included) ---> MSVCR100

程序(包括静态库)是否可以毫无问题地很好地链接到 MSVC100?或者我可以期待 未定义的行为 因为 STL 的 header 很容易在 MSVCR71MSVC100 之间发生变化?

终于在MSDN上找到了答案...

我引用(Visual C++ change history 2003 - 2015):

To avoid run-time errors that are difficult to detect and diagnose, we recommend that you never statically link to binaries that were compiled by using different versions of the compiler. Also, when you upgrade an EXE or DLL project, make sure to upgrade the libraries that it links to. If you're using CRT (C Runtime) or STL (Standard Template Library) types, don't pass them between binaries (including DLLs) that were compiled by using different versions of the compiler.

因此,最好使用相同的编译器重新编译所有内容。