【问题标题】:C++ SFML with MinGW version 8.2.0 and Atom text editor带有 MinGW 8.2.0 版和 Atom 文本编辑器的 C++ SFML
【发布时间】:2019-10-31 15:37:32
【问题描述】:

我正在尝试学习使用带有 SFML 库的 c++ 制作 2d 游戏。我正在使用 Windows,但我更喜欢使用 Atom 文本编辑器而不是 Visual Studio。我做了很多关于如何做到这一点的研究,但我仍然不知道如何将 SFML 库与 Atom 一起使用。那么,我将如何在我用 Atom 编写的 c++ 项目中实现 SFML 库。谢谢!

【问题讨论】:

  • 我是否正确假设您能够使用 Atom 编写和编译非 SFML 应用程序,但是当您尝试编译 SFML 应用程序时,您会收到一些错误,例如“致命错误:SFML/Graphics.hpp : 无此文件或目录” ?如果是这样,我想我有一个不涉及等待 Atom 包的答案。
  • 顺便说一句,SFML 网站的文字说他们支持mingw,但随后他们链接到mingw-w64,例如在this page。他们用红色说你的编译器版本需要匹配他们的,所以理论上使用 MinGW 而不是 MinGW-w64 可能会导致问题。 (也就是说,我在使用 SFML 和 Atom 的 MinGW 时没有遇到任何问题,所以......)
  • 我将如何在 Atom 上使用 MinGW 实现 SFML?

标签: c++ g++ mingw atom-editor sfml


【解决方案1】:

此答案假设您已下载 SFML 的 32 位 MinGW 版本,并且您想从命令行编译用 Atom 编写的程序1。在您刚刚下载的 SFML 文件夹中,有三个对我们来说很重要的文件夹:bin、lib 和 include。

  • bin 文件夹包含 DLL。在这个答案中,我只会讨论到 SFML 的动态链接,因为这是我的经验。要运行使用 SFML 构建的任何动态链接的可执行文件,您需要将所有相关的 DLL 复制到与可执行文件相同的文件夹中。 (哪些是相关的?简单的解决方案是复制所有这些。2

  • lib 文件夹包含库(扩展名为 .a 的文件)。如果你去你安装MinGW的文件夹(默认是C:\MinGW),然后按照路径\lib\gcc\mingw32\8.2.0,你应该在一个有几个子文件夹的文件夹中,一些.o文件和一堆 .a 文件。将 SFML lib 文件夹中的所有文件复制到此处。现在 MinGW 知道了 SFML 库。

  • 最后,include 文件夹包含一个名为 SFML 的文件夹,其中包含所有 SFML 头文件。复制 SFML 文件夹。现在还记得我们在上一步中将所有 .a 文件转储到的文件夹吗?该文件夹应该有一个名为 include 的子文件夹,其中包含一个名为 C++ 的文件夹,其中包含所有标准 C++ 头文件(iostream、算法等)。将我们在一秒钟前拾取的 SFML 文件夹粘贴到该 C++ 文件夹中。 (不是文件夹的 contents,而是文件夹本身。)现在 MinGW 知道 SFML 标头,因此我们可以安全地键入例如#include <SFML/Graphics.hpp>

例如,要编译 this tutorial 末尾的文件 main.cpp 并将其与 Atom 动态链接,您可以在 cmd.exe 中运行命令 g++ main.cpp -lsfml-graphics -lsfml-window -lsfml-system


免责声明:复制库和包含文件夹不是 SFML 推荐的方法。相反,他们建议使用命令行参数来告诉 g++ 去哪里寻找。但是 IMO (1) 他们的方法对初次使用的用户来说更痛苦,并且 (2) 初次使用的用户不太可能使用多个编译器或多个版本的 SFML。 (如果您正在使用多个编译器或 SFML 的多个版本,您会希望按照他们的方式进行操作。在这种情况下,请告诉我,我会尽力提供帮助。)


1) 您实际上可能希望通过单击按钮直接在 Atom 中编译(默认为 F5?)。如果您已经知道如何直接在 Atom 中编译非 SFML 应用程序,那么我认为以上内容应该足以让您也编译 SFML 应用程序,只要您在 Atom 中适当地设置默认编译器标志。 (我的意思是:对于上面的示例,您的标志应该包括 -lsfml-graphics-lsfml-window-lsfml-system,按此顺序)。

2) 要确定您需要哪些 DLL,您可以将它们全部添加并开始删除它们,直到您的应用程序无法运行。或者,请记住以下三点:

  • 你总是需要 openal32.dll
  • 您需要在编译时链接到的 DLL
  • 如果您在调试模式下编译,则需要带有“-d”的版本(例如 sfml-graphics-d-2.dll),否则需要不带“-d”的版本

所以在上面的例子中,你只需要 openal32.dll、sfml-graphics-2.dll、sfml-window-2.dll 和 sfml-system-2.dll。

【讨论】:

  • 谢谢,这行得通。有没有办法将 DLL 移动到单独的文件夹中?
  • @SuspiciousGoat 我从来没有费心去做,所以我不能给你一个自信的答案。也许试试here的建议?此外,您实际上并不需要大多数 DLL。我会更新我的答案来详细说明。
  • 如何使用 DLL 进行分发:我可以将它们编译成 exe 还是应该使用安装程序?
  • 如果您想了解有关分发 SFML 应用程序的信息,您可能应该问另一个问题,如果它还没有被问到的话。而且我可能不会回答这个问题,因为我以前从未真正分发过 SFML 应用程序。也就是说,我相信您可以将所有内容编译成一个 exe。这方面的术语是静态链接,您可以找到更多详细信息in the SFML FAQ
  • 如果您使用安装程序,请记住一点,MinGW 包含一些额外的 DLL,但 Windows 的默认安装不包含这些 DLL。由于您的播放器可能没有安装 MinGW,因此您也需要包含这些 DLL。 Here's a link 回答一个问题,您可以在其中了解更多信息。
【解决方案2】:


你需要Atom Packages

所以,我目前正在为在 Atom 上编译的 SFML 开发一个新包。 我只需要编写 Docs 并使其成为 Atom 包,但请查看 repo:https://github.com/brhaka/sfml-compiler

你可以为它做出贡献,或者只是给它加星:)

我正在努力尽快发布,所以我建议你稍等一下。还有另一个包,但没有文档。

你的名字真酷!


希望对你有帮助!

婆罗门

【讨论】:

  • 如何为 MinGW 8.2.0 版安装 SFML。我在他们的下载页面上看到的最新版本是 MinGW 版本 7.3.0。我尝试使用源代码中的 cmake 为我的版本构建它,但这只是给出了错误“错误是配置,项目文件可能无效。”
  • 你可以使用CodeBlocks,直到我发布我的包。您只需要安装 SFML,使用 GNU GCC 编译器(类似的东西)创建一个新项目,然后将 SFML 添加到构建选项中。
  • 好的,期待您的包裹完成。
  • 谢谢老兄!您可以观看,而不是当我发布它时,您会通过电子邮件知道。
  • sfml-compiler 已经为 Atom 做好了准备!您可以在Atom.io/packages 找到它。这是维基:github.com/brhaka/sfml-compiler/wiki
猜你喜欢
  • 1970-01-01
  • 2022-10-23
  • 2017-04-23
  • 2013-06-07
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 2018-03-05
  • 2018-01-18
相关资源
最近更新 更多