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

时间:2016-01-12 13:07:23

标签: c++ visual-studio runtime-error

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

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

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

  • libA是一个链接MSVCR71
  • 的共享库
  • Exe是我的计划,与libAMSVCR100
  • 相关联

然后我有以下依赖方案:

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

那就是,我知道我不该做的事情!

但是,如果现在,我将libA编译为静态库,使用任何使用MSVCR71的Visual Studio,并使用Exe编译我的程序libAMSCVR100使用Exe(lib A included) ---> MSVCR100 的Visual Studio。

然后我会有以下方案:

MSVC100

程序(包括静态库)是否可以很好地与MSVCR71链接而没有任何问题?或者我可以期待未定义的行为,因为STL的标题容易在MSVC100VariableNames之间发生变化?

1 个答案:

答案 0 :(得分:1)

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

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

  

为了避免难以检测和诊断的运行时错误,我们   建议你永远不要静态链接到那些二进制文件   通过使用不同版本的编译器编译。还有,当你   升级EXE或DLL项目,确保升级库   它链接到。如果您正在使用CRT(C运行时)或STL(标准模板)   库)类型,不要在二进制文件(包括DLL)之间传递它们   是使用不同版本的编译器编译的。

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