【问题标题】:Sending your c++ project [closed]发送您的 C++ 项目 [关闭]
【发布时间】:2020-12-23 01:23:48
【问题描述】:

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

我正在使用 MinGW 编译器。

【问题讨论】:

  • 这将向您展示如何在代码块中创建 .exe 文件。 stackoverflow.com/questions/8450121/…
  • 您是想只给您的朋友发送可执行应用程序,还是希望他们能够自己编译代码?
  • 我使用 NSIS 来制作安装程序。 https://nsis.sourceforge.io/Download
  • 他安装gcc编译器后立即解决 可能意味着他在@的任何文件夹中都没有正确的mingw运行时dll 987654323@ 环境变量。在典型的 Windows 机器上,这是可以预料的。
  • 在安装程序包中,您可以打包 mingw dll(不需要编译器)+您的应用程序 + sfml dll ..

标签: c++ mingw


【解决方案1】:

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

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

问题是如何确定要发送哪个.dlls。有几种方法:

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

  • 更文明的做法是使用ntdll 之类的工具列出您的应用使用的所有.dlls。然后复制它们,忽略系统的(位于C:\Windows 或子目录中)。

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这是否意味着我需要在包中包含 mingw 编译器?
      • "这是否意味着我需要在包中包含 mingw 编译器?" - 不。您不需要包含编译器。但是您确实需要包含编译器运行时库(适用于 any 编译器),当然,还需要包含您使用的 SFML 库,如以及您可能正在使用的任何其他库。
      • 运行时库是指我在程序中使用的任何东西,例如iostream
      • @AryanParekh 来自iosteam 的东西将由您的编译器运行时库实现,是的。所以你需要包含它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      相关资源
      最近更新 更多