发送你的 C++ 项目

Sending your c++ project

我使用 SFML 库用 C++ 编写了一个应用程序。我将其配置为 运行 程序的代码块。比方说我现在想把这个应用程序发送给我的朋友,我能做到这一点的最好方法是什么,这样他就不必通过下载很多东西来 运行?

我正在使用 MinGW 编译器。

创建安装程序或程序包。例如;在 RedHat Linux 上,您需要创建一个 RPM 包。在 Windows 上,您想创建一个 MSI 文件。无论您做什么,您创建的包都应该捆绑您的应用程序 运行 所需的所有内容,并将其放入目标系统上的正确位置。这包括您的可执行文件,也包括您使用的任何库(包括您的编译器 运行time 库)。

在大多数情况下,只需运送您的 .exe 及其所有依赖项就足够了。 在某些情况下,您可能还需要运送 运行 应用程序所需的其他文件,例如配置文件、图像、图标...

您可以使用 copypedepshttps://github.com/brechtsanders/pedeps 中的 -r 标志将您的 .exe 及其依赖的 .dll 文件复制到一个空文件夹中。

然后您可以压缩该文件夹中的所有内容并将其发送给可以将其解压缩为 运行 .exe 的人。

或者您可以制作适当的安装程序来分发相同的文件。

您的程序需要一些 .dll 到 运行:一些是系统的,一些是编译器附带的,一些来自您使用的库 (SFML)。您需要将所有这些 .dll(系统的除外)与您的 .exe 一起发送,并且它们应该在同一目录中。

您制作合适的安装程序或向您的朋友发送 zip 存档并不重要。 (如果它是一个存档,他们可能必须在 运行 之前手动提取它 .exe。)

问题是如何确定要运送哪些 .dll。有几种方法:

  • 打开控制台,cd 到您的 .exe 所在的位置,执行 set PATH= 并尝试 运行 输入可执行文件的名称。由于编译器安装不再位于 PATH 中,因此不应在其中看到 .dll,并且应该抱怨它们丢失了。在您提供一个 .dll 后,它会要求提供下一个。

  • 一种更文明的方法是使用像 ntdll 这样的工具来列出您的应用程序使用的所有 .dll。然后复制它们,忽略系统的(位于 C:\Windows 或子目录)。

请注意,这两种方法都依赖于 C:\Windows 或子目录中没有多余的 .dll;一些写得不好的安装程序喜欢把他们自己的 .dll 放在那里。要检查这一点,请列出编译器附带的所有 .dll(它们应该与 gcc.exe 在同一目录中),以及来自您的库 (SFML) 的列表。然后在C:\Windows及其子目录中寻找同名的.dll,如果找到则删除。