VS2015 SP3 C++运行时是否与SP2 C++运行时兼容

Is VS2015 SP3 C++ runtime compatible with the SP2 C++ runtime?

本文关键字:运行时 C++ SP2 是否 SP3 VS2015      更新时间:2023-10-16

我们有不同的团队,安装了不同版本的VS2015。有些安装了2015 SP2,另一些安装了VS2015 SP3。

我想知道这些服务包提供的C++运行时是否兼容。即:

  • 我可以使用VS2015 SP2 dll(传递C++对象)运行VS2015 SP3 C++可执行文件吗
  • 反之亦然:我可以使用VS2015 SP3 dll(传递C++对象)运行VS2015 SP2 C++可执行文件吗

我找不到任何有关兼容性的信息。。。

没有Visual Studio 2015 Service Pack 2或3。您可能在谈论:Visual Studio 2015 Update 2和Visual Studio 2015 Update3。

所以我认为你的问题应该翻译一下:

Visual Studio 2015 Update 3是否对C++标准对象进行了任何更改

您可以在此处找到对C++编译器所做更改的列表:https://www.visualstudio.com/en-us/news/releasenotes/vs2015-update3-vs#visualcpp

您的问题特别关注标准库的更改,这些更改在这里列出:

  • 我们已经恢复了在破坏Update2中回归的琐碎对象范围时的调试模式性能,比如在vector中
  • 我们已经实现了C++17工作文件中的可交换特性,来自提案P0185添加[nothrow-]可交换特性。作为一个推测性的C++17特性,当使用/std:C++latest进行编译时,特征(is_swappableis_swappable_withis_nothrow_swappableis_nothrow_swappable_with)仅可见,并且对std::swap的约束仅处于活动状态
  • 我们已经删除了vcruntime140.dll中的ETW事件调用,以及以前在进程启动和dllmain期间激发的静态库
  • 新增我们删除了STL容器使用的常见机制(如std::vector)中的符号名称长度,降低了C4503警告的可能性。例如,以下类型不再生成警告:concurrency::concurrent_unordered_map<>>>>

最后一个项目符号表示C++对象内部的符号命名已更改。这意味着,在一个更新创建的对象中,符号名称不一定与另一个更新所期望的符号名称一致。因此,您的问题的答案是:否,对象符号命名在不同版本之间发生了变化。它们不再保证是兼容的


此外,我确实浪费了大量时间试图弄清楚为什么在代码的一部分中有效的东西在另一部分中无效,对我来说,这只是对小更新所做的。根据我的经验,我恳请您:让您的整个团队使用完全相同的Visual C++版本。如果你不这样做,2件事中的1件会发生:

  1. 您的团队成员总是对版本差异持怀疑态度。如果他们期望的东西不起作用,他们会觉得有必要在Visual C++的另一个版本上尝试。更糟糕的是,他们可能觉得有必要确保他们的代码在其他版本的Visual C++中使用时得到支持。你会在这里经历一段缓慢而稳定的时间
  2. 您的团队成员将使用在不同版本之间进行更改的功能。但他们没有意识到版本更改是罪魁祸首。这个问题将花费大量的时间,因为识别错误将非常困难

总结一下,正确的答案是:让您的整个团队使用固定版本的Visual Studio,这样您或他们就不会一直担心