如何将 C++ 代码编译为独立的 Windows 可执行文件?

如何将 C++ 代码编译为独立的 Windows 可执行文件?

我有一个 C++ 程序,可以使用 g++ 在 Mac OS 10.11 上编译并运行。我还能够使用 Visual Studio 在 Windows 10 上编译并运行它。但是,当我尝试在未安装 Visual Studio 的 Windows 10 计算机上运行 .exe 文件时,Windows 抱怨几个 .dll 文件不存在。

我希望能够在 Windows 计算机上运行此程序,而无需安装任何东西。该程序非常简单,由一个 .cpp 文件组成,并且只存在于纯文本终端中。它所做的就是请求输入、显示一些文本并写入文件。我正在使用这些库:

#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>

我也在 Cygwin 和 OS X 上尝试了 MinGW。两者都给出了错误‘stoi’ was not declared in this scope。我尝试了这个补丁,但没有成功:https://stackoverflow.com/questions/16132176/problems-with-stdstoi-not-working-on-mingw-gcc-4-7-2 我不知道 MinGW 是否会使我的 .exe 独立于其他文件。

如何才能让我的程序在 Windows 上独立运行,这样就不需要用户安装任何 .dll 文件或其他软件了?

答案1

当您使用 Microsoft Visual C++ 编译器编译某些内容时,它会将其编译为动态链接到 MS VC++ 运行时 DLL(我认为对应于您拥有的 VS 版本,例如 VS2010 将使用 2010 运行时)。据推测,这是为了让他们能够更新 DLL,而无需您重新编译应用程序。

这意味着您需要在任何要使用您的应用程序的计算机上安装运行时库。这些库作为 MS 网站上提供的 Visual C++ 可再发行组件安装程序的一部分进行分发。事实上,许多计算机已经安装了所需的 DLL,因为有许多程序在安装过程中安装了可再发行组件。但这并不能保证一定会这样(老实说,我很惊讶它们没有通过 Windows 更新自动安装)。

StackOverflow 上有一条问题这里这提供了一些关于如何静态链接运行时库的线索,这样您就不需要安装可再发行的 DLL。

相关内容