【问题标题】:Compiling a C code into a single executable compatible with both WinXP and Win7将 C 代码编译为与 WinXP 和 Win7 兼容的单个可执行文件
【发布时间】:2024-04-27 11:10:02
【问题描述】:

我正在尝试将 C 程序编译为与 WinXP 和 Win7 兼容的可执行文件。 由于代码需要尽可能紧凑,我希望它使用 DLL。 Visual Studio Express 2012 update4 可以为 WinXP 生成代码,但后者不适用于 Win7。 在Win7上运行时出现如下错误:“The program cant run because MSVCR110.dll is missing...”

谁能帮我解决这个问题? 提前致谢!

【问题讨论】:

  • 每个操作系统都有不同的可执行文件真的有问题吗?
  • 感谢您的快速回复。不幸的是,这是一个问题......
  • 此链接对您有帮助吗? software.intel.com/en-us/articles/…
  • 谢谢,我已经试过了,但没有帮助......

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


【解决方案1】:

您在VS2012下编译的程序应该可以在XP和Windows 7上运行。问题只是Windows 7机器上没有部署所需的运行时。这是链接到动态运行时的先决条件。您必须将运行时部署到运行该程序的任何机器上。

一旦您部署了运行时,例如使用 VS2012 可再发行包,您应该会发现您的代码将运行。请注意,您需要在所有机器上执行此操作,而不仅仅是 Windows 7 机器。事实上,您不必在 Windows XP 机器上这样做只是意味着一些其他应用程序已经在那里部署了运行时。 XP 机器很可能是您的开发机器,并且在您安装 Visual Studio 时部署了运行时。

作为安装可再发行包的替代方法,您可以简单地将运行时 DLL MSVCR110.dll 放在可执行文件所在的目录中。我建议您阅读有关此主题的文档:Redistributing Visual C++ Files

请注意,如果您真的想让部署尽可能小而简单,那么链接到动态运行时将无法实现。您会发现静态链接导致最小和最简单的部署。并不是我建议这样做。由于各种原因,动态运行时是首选。

【讨论】:

  • +1。对于可能的紧凑部署,根本不要链接到 C 运行时库。当然,说起来容易做起来难——首先,这意味着你的代码必须避免所有 C 标准库调用,只使用 Windows API——如果你正在处理任何长度的现有代码,这可能是不可信的。更复杂的是,Windows API 的某些部分(例如,许多“更安全的字符串函数”)实际上是在 C 运行时库中实现的。不过,出于某些特殊目的,这是一个明智的选择。
最近更新 更多