【问题标题】:Does VS2013 use the same C run-time as VS2012 (e.g., msvcr110)?VS2013 是否使用与 VS2012 相同的 C 运行时(例如 msvcr110)?
【发布时间】:2014-06-05 22:30:18
【问题描述】:

我通常假设每个版本的 Visual Studio 都与不同版本的 C 运行时相关联。例如:VS2005 : msvcr80.dll :: VS2008 : msvcr90.dll

我的一位同事告诉我,他的安装程序表明我们的 VS2013 项目依赖于 msvcr110.dll。我们都觉得这很奇怪,因为这与 VS2012 使用的依赖项相同。

但是,MSDN 支持这一点:

Visual Studio 2013 确实重用了 2012 年的运行时,还是我遗漏了什么?

编辑:我忘了在我原来的问题中提到 Visual Studio 2013 可再发行运行时附带一个文件 msvcr120.dll。我的困惑来自于这个文件存在这一事实,但我们的安装程序既没有识别出,也没有在 MSDN 文档中提及。

编辑:在与我的同事讨论了如何确定依赖关系后,安装程序认为我们的项目依赖于 msvcr110.dll 的原因是因为它正在查看一个旧版本。

不幸的是,这恰逢 MSDN 文档中有关运行时版本的复制/粘贴错误。我将联系 Microsoft 让他们知道文档错误。再次感谢大家的帮助。

注意:即使他们确实使用了相同的运行时,我也不会假设任何未来的版本都是这样。我只是觉得这很好奇。

【问题讨论】:

  • 这主要是我对编译器版本之间的二进制兼容性的期望的副产品。 (而且,惊喜总比不愉快好。)
  • 简单的解释是您依赖于由先前版本的 VS 构建的 DLL。要么平台工具集设置错误,要么被复制。

标签: c++ visual-studio-2012 visual-studio-2013


【解决方案1】:

默认情况下,VS 2013 C 和 C++ 项目将依赖于 msvcr120.dll(或相当于 msvcr120d.dll 的调试版本)。

但是,如果机器上安装了 VS1012,通过在项目设置中将“平台工具集”更改为“Visual Studio 2012 (v110)”,很容易将依赖关系更改为 msvcr110.dll。支持可追溯到 VS 2008 (v90) 的旧版本的运行时。

我假设您链接到的 2013 运行时的文档页面由于疏忽而没有更新。

【讨论】:

  • 感谢您的回复。我同意 MSDN 文档完全有可能出现复制/粘贴错误。然而,让我停下来的主要事情是文档我们的安装程序是这样说的。明天我将与我的同事核实,看看如何识别这种依赖关系 - 因为我完全有可能也存在语法错误!
  • 不要忘记检查项目设置中的“平台工具集”属性。
  • 这实际上与我们首先注意到这一点的原因有关:我们最近修改了我们的项目以使用 2013 编译器而不是 2012。不过,我会仔细检查每个项目的设置,在万一有任何落伍者。另外,我的理解是 v12 运行时根本没有被确定为我们的依赖项,这正是引起我们注意的原因。不过,我明天会和我的同事核实一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
  • 2016-10-05
相关资源
最近更新 更多