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.dll
和 msvc100.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 可再发行包 - 出现错误
安装 redist 时,Qt Creator 4.0.3 报告“警告:在 C:\... 中找不到 Visual Studio 发行版可再发行文件”