【问题标题】:Using VS2015 to compile C++ for Vista使用VS2015为Vista编译C++
【发布时间】:2015-11-08 19:42:33
【问题描述】:

几天前,我在微软论坛的标题中提出了这个问题。 我得到了两个选项,恕我直言不是很好:

  1. 在目标机器上安装 VS2015 可再发行组件。
  2. 静态编译,使代码不会调用VS2015 DLL文件。

第一个选项大大增加了我的应用程序的安装时间。

第二个选项会显着增加二进制文件的大小,增加构建时间,并且在使用标志 /CLR 编译时不适用。

现在看来,通过将我的开发转移到 Visual Studio 2015,我必须放弃对 Vista(实际上,也包括 Windows 7)的支持,或者提供比我之前提供的产品更差的产品。

注意:我希望使用 Platform Toolset = v140_xp 可以解决问题,但显然不会。

请给我一个更好的解决方案。

【问题讨论】:

  • VS2015 redistributables 是正确的做法。
  • 即使您使用的是早期版本的 Visual Studio,您仍然会遇到此问题。较旧版本的 Windows 不能可靠地保证在发布后具有将安装较新 MSVCRT DLL 的更新。 I answered this question with regards to VS 2010 binaries a long time ago.答案对VS 2015仍然有效。2015 download here
  • 在旧版本的 VS 中,您可以将所需的 DLL 文件(例如 msvcp110.dll、msvcr110.dll)添加到您的安装中。就我而言,它解决了问题。不再。添加 vcruntime14.dll 只会将问题提前一步移到缺少 DLL 文件的新列表中。
  • 显然您需要分发正确的运行时文件集。没有什么新东西。
  • @DavidHeffernan 我不同意。 MS 提供“目标”和“工具集”选项的目的是,或者我理解,您将能够创建在旧平台上运行的应用程序。

标签: c++ visual-studio-2015 windows-vista redistributable


【解决方案1】:

在 VS2015 中情况有所改变。这篇文章解释了你需要做什么:http://blogs.msdn.com/b/vcblog/archive/2015/03/03/introducing-the-universal-crt.aspx

简而言之,通用 CRT 现在是一个 Windows 组件。它随 Windows 10 提供,并通过早期版本的 Windows 更新提供。您的选择:

  1. 依靠 Windows 更新包。
  2. 应用运行时可再发行组件。
  3. 静态链接,强烈建议不要这样做。
  4. 部署应用程序本地安装运行时所需的二进制文件。

这个最终选项与您当前所做的相匹配。文章说:

支持通用 CRT 的应用本地部署。要获取用于应用本地部署的二进制文件,请安装适用于 Windows 10 的 Windows 软件开发工具包 (SDK)。这些二进制文件将安装到 C:\Program Files (x86)\Windows Kits\10\Redist\ucrt。您需要使用您的应用程序复制所有 DLL(请注意,不同版本的 Windows 所需的 DLL 集是不同的,因此您必须包含所有 DLL,以便您的程序在所有受支持的 Windows 版本上运行)。

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多