关于此Stack Overflow问题: How bad is it to mix and match Visual C++ runtime DLL files in one process?
我知道在运行时使用不同版本的MSVCR会导致堆损坏。
但是让我们想象下面的情况是行不通的:
libA
是一个链接MSVCR71
Exe
是我的计划,与libA
和MSVCR100
然后我有以下依赖方案:
Exe +--> libA ---> MSVCR71
+--> MSVCR100
那就是,我知道我不该做的事情!
但是,如果现在,我将libA
编译为静态库,使用任何使用MSVCR71
的Visual Studio,并使用Exe
编译我的程序libA
,MSCVR100
使用Exe(lib A included) ---> MSVCR100
的Visual Studio。
然后我会有以下方案:
MSVC100
程序(包括静态库)是否可以很好地与MSVCR71
链接而没有任何问题?或者我可以期待未定义的行为,因为STL的标题容易在MSVC100
和VariableNames
之间发生变化?
答案 0 :(得分:1)
我终于在MSDN上找到了答案......
我引用( Visual C++ change history 2003 - 2015 ):
为了避免难以检测和诊断的运行时错误,我们 建议你永远不要静态链接到那些二进制文件 通过使用不同版本的编译器编译。还有,当你 升级EXE或DLL项目,确保升级库 它链接到。如果您正在使用CRT(C运行时)或STL(标准模板) 库)类型,不要在二进制文件(包括DLL)之间传递它们 是使用不同版本的编译器编译的。
因此,最好使用相同的编译器更好地重新编译所有内容。