【问题标题】:Standard libraries still require additional runtime libs? (vcruntime140_1.dll)标准库还需要额外的运行时库吗? (vcruntime140_1.dll)
【发布时间】:2020-06-24 10:04:35
【问题描述】:

我使用标准头文件和 DirectX(见下文)创建了一个 Windows x64 程序。我有点期待用户不需要额外的运行时库。但我从一些人那里得到了vcruntime140_1.dll 丢失的反馈。这很容易解决,但我如何确保用户不需要下载除 DirectX 之外的其他运行时库?

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

【问题讨论】:

  • 看起来很简单。在 VM 上加载全新安装的 Windows。复制你的exe。运行它,满足依赖关系,重新运行直到它按预期工作。记下您添加的依赖项并将它们与您的 exe 一起发布。
  • 另外我希望你使用微软的安装程序来实现msvcp依赖;而不是从您的 System32 或其他东西复制。 :)
  • “我如何确保用户不需要下载额外的运行时库” - 简单,不依赖它们。如果您正在编写 C++ 代码,则依赖于 C++ 实现的支持库。 C 语言也是如此。编写不依赖于任何运行时库的代码是可能的,但非常重要。
  • 如果你的开发平台是visual studio,那么对应的vcredist安装程序的存在是有原因的;这将是一个大问题。如果您的程序是使用 VS2015u3 构建的,则相应的 vsredist 安装程序模块应该包含在您的安装程序中,并按保证运行。此外,它们可以从 MS 下载,供开发人员作为其交付程序的一部分包含在内。
  • 考虑静态链接runtime,而不是(/MT/MTd)。

标签: c++ winapi dll


【解决方案1】:

在 Windows10 下运行用 Visual C++ 开发的程序需要关联的运行时可再发行组件:https://support.microsoft.com/en-us/help/2977003/the-latest-supported-visual-c-downloads

Microsoft 已决定在标准 Windows 10 安装中包含通用 C 运行时 (CRT) 库,这些库通过通用 Windows 更新机制保持最新。 Visual C++ 可再发行组件依赖于这些 UCRT,但需要单独安装。安装 Visual C++ 运行时库还将验证是否安装了最新的 UCRT,以防用户没有定期更新 Windows。更多详情请访问MSDN

另一种选择是使用静态链接将库包含在可执行文件中。该程序将变得更大,应注意它们被多次包含。此外,Microsoft 对 dll 的任何修复都需要重建程序。

【讨论】:

  • 如果您编写 C 程序,则无需部署 C++ 运行时库。如果您部署 C++ 运行时库,您将必须生成新的部署才能从更新中受益。您不能只让系统使用支持库的更新版本,并在未验证您的程序在该更新环境下运行的情况下利用它们。无论动态链接的提议好处重复多少次,它都不会改变事实:无论哪种方式,您都必须发布程序的更新版本。
猜你喜欢
  • 2021-01-12
  • 1970-01-01
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多