【问题标题】:Is VS2015 SP3 C++ runtime compatible with the SP2 C++ runtime?VS2015 SP3 C++ 运行时是否与 SP2 C++ 运行时兼容?
【发布时间】:2017-02-07 10:47:41
【问题描述】:

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

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

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

我找不到任何关于兼容性的信息...

【问题讨论】:

  • 你为什么会假设in兼容?服务包提供修复,它不是主要版本升级。你有遇到什么问题吗?
  • 顺便说一句,一旦 Windows 更新更新运行时,您的应用程序可能最终会以最新版本运行
  • @PanagiotisKanavos:“你为什么要假设in兼容?” - 也许是多年的痛苦经历?意外引入这种不兼容非常容易。
  • @MartinBonner 不是真的 - 这样的事情(核心组件中的意外破坏性更改)非常罕见,以至于它们会成为新闻,在几天内被删除和修复。发行说明中总是提到重大更改。 C++ 运行时库所有 C++ 应用程序的核心组件
  • “是”是一个非常无聊的答案,从未发布过。因此,您只会听到有人回答“否”的消息。您找不到有关兼容性问题的任何信息意味着最准确的答案。如果结果是“否”,那么您可以随时单击该按钮。

标签: c++ visual-studio-2015


【解决方案1】:

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

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

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

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

您的问题特别关注标准库的更改,此处列出:

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

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


此外,I've definitely wasted a tremendous amount of time 试图弄清楚为什么在一段代码中起作用的东西在另一部分中不起作用,对我来说,这只是对 次要更新。根据我的经验,我恳求您:让您的整个团队完全使用相同的 Visual C++ 版本。如果您不这样做,将会发生 2 件事中的 1 件事:

  1. 您的团队成员总是对版本差异持怀疑态度。如果他们期望的东西不起作用,他们会觉得有必要在其他版本的 Visual C++ 上尝试它。更糟糕的是,如果在其他版本的 Visual C++ 中使用,他们可能觉得需要确保他们的代码得到支持。您将在这里体验到缓慢而稳定的时间滴落。
  2. 您将有团队成员使用在版本之间确实发生变化的功能。但他们不认为版本更改是罪魁祸首。此问题将花费大量时间,因为识别错误非常困难。

总结正确的答案是:让您的整个团队使用固定版本的 Visual Studio,这样您或他们的脑海中就不会一直有那种烦人的担忧。

【讨论】:

  • 我不确定我是否遵循您的逻辑。 MS 已经重命名了实际的 STL 类型,您希望它能够正常工作吗?如果部分代码期望运行时提供 AAA,而新的运行时已将其重命名为 AA,那么事情就会中断。
  • @MSalters 我误解了最后一个要点。鉴于您的评论,现在这很有意义。我已经进行了相应的编辑。
  • 谢谢,我在一家大型组织工作,我们的选择已设置为 SP2(抱歉更新 2 ;-))。我们有一个大问题:VS Studio 安装程序。没有简单的方法可以恢复到 SP2。完全卸载通常无法正常工作。最大的问题:即使在安装 VS2015 Update2 时,安装程​​序似乎确实在网上检查并找到更新的更新并安装 Update 3!!!!!!
  • @SergeWeinstock 我相信我的回答已经解决了最初的问题。您似乎在问后续问题:“如何安装 Visual Studio 2015 Update 2 并阻止它安装更新 3?”这可以作为stackoverflow.com 问题解决,但我鼓励您接受这个答案,然后打开这个问题:superuser.com
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 2011-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多