【发布时间】:2016-01-12 13:07:22
【问题描述】:
关于堆栈溢出问题: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
那是,我知道我不应该做的事情!
但是如果现在,我使用任何使用 MSVCR71 的 Visual Studio 将 libA 编译为静态库,然后使用使用 MSCVR100 的 Visual Studio 编译我的程序 Exe 和 libA .
然后我将有以下方案:
Exe(lib A included) ---> MSVCR100
程序(包括静态库)是否可以很好地与MSVC100 链接而没有任何问题?或者我可以期待 未定义的行为,因为 STL 的标头容易在 MSVCR71 和 MSVC100 之间发生变化?
【问题讨论】:
-
库不与任何东西“链接”。它只是用过时的#include 文件编译的。可能会奏效,除非你尝试过,否则你不会知道。如果你有源代码可以重新编译,那么浪费你的时间去尝试是没有意义的。
-
听起来您在运行时的 71 和 100 版本之间混合了 STL 和标准库类型 - 不要指望这会起作用。如果您的库不共享任何标准库类型和服务(例如内存分配),那么您应该没问题。如果你有代码,省去你的痛苦,只需将所有内容重新编译到一个目标运行时。
标签: c++ visual-studio runtime-error