发送您的C ++项目

问题描述

我已经使用SFML库用c ++编写了一个应用程序。我将其配置为代码块以运行程序。假设我现在想将此应用程序发送给我的朋友,我能做到的最好的方法是什么,这样他就不必下载很多东西来运行它?

我正在使用MinGW编译器。

解决方法

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

,

在大多数情况下,仅交付您的.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或子目录中)。

请注意,两种方法都依赖于.dll或子目录中没有无关的C:\Windows;一些写得不好的安装程序喜欢在其中放置自己的.dll。要进行检查,请列出编译器随附的所有.dll(它们应与gcc.exe放在同一目录中)以及来自库(SFML)的列表。然后在.dll和子目录中查找具有相同名称的C:\Windows,然后删除它们。