Visual C++ 2012 可再发行版是不是与 2010 版本向后兼容?

Posted

技术标签:

【中文标题】Visual C++ 2012 可再发行版是不是与 2010 版本向后兼容?【英文标题】:Is Visual C++ 2012 redistributable backwards compatible with the 2010 version?Visual C++ 2012 可再发行版是否与 2010 版本向后兼容? 【发布时间】:2014-03-30 19:20:03 【问题描述】:

我有一个带有几个可执行文件的软件,它同时依赖于 VC++ 2012 和 VC++ 2010(msvc110.dllmsvc100.dll,类似的东西)。我想使用 2012 版可再发行组件(即 7mb)发布我的应用程序,并避免使用 2010 版可再发行组件,因此我减小了安装程序的大小。

我的问题是,2012 版的可再发行版是否与 2010 版向后兼容?还是应该将它们都嵌入到安装程序中?

请注意,可执行文件已经编译,我没有使用相同版本编译它们的源代码。

【问题讨论】:

并非如此,C++11 带来了许多变化,标准 C++ 库的实现也发生了翻天覆地的变化。最重要的是,你的程序与它不兼容,它坚持要找到msvcr110.dll,不会容忍msvcr100.dll。这是一件好事。在一个程序中混合 CRT 版本通常是一个非常糟糕的主意。 @HansPassant 如有必要,请多解释一些并将其发布为答案,以便我将其标记为已接受。另外,非常感谢! 【参考方案1】:

很遗憾,如果您没有提供编译模块所针对的运行时,如果目标系统上不存在该运行时,您的应用程序将会失败。它如何失败取决于您构建应用程序的方式(例如链接的 lib dll,与 OpenLibrary 模块)。

至于兼容性,我们的团队也有类似的问题,所以我使用 VS2005、VS2010 和 VS2012 模块编写了实验测试代码,其中一个模块将创建一个 std::vector (等)并将其传递给另一个模块以供使用。它失败了。非常容易重现这个实验。

您需要同时发货。

【讨论】:

【参考方案2】:

您有多个 exe,只需将它们全部发送或将其标记为您的应用程序的要求。 DLL 不大。 如果您可以重建应用程序以对齐它们,以便它们使用相同的 crt,那就更好了。

【讨论】:

以上是关于Visual C++ 2012 可再发行版是不是与 2010 版本向后兼容?的主要内容,如果未能解决你的问题,请参考以下文章

安装 - microsoft visual c++ 2003 可再发行包 - 出现错误

Visual Studio C++ 可再发行兼容性

安装 redist 时,Qt Creator 4.0.3 报告“警告:在 C:\... 中找不到 Visual Studio 发行版可再发行文件”

如何使我的 Visual c++ 2013 应用程序不需要下载可再发行包?

带有 WIX 的 C++ 可再发行包

如何确定我的程序需要运行哪些 C++ 可再发行组件?