【问题标题】:How to compile SFML with MinGW?如何用 MinGW 编译 SFML?
【发布时间】:2014-06-17 07:57:21
【问题描述】:

我有一个简单的文件“main.cpp”,如下所示。我还在“C:\SFML-2.1\”下拥有所有 sfml 2.1 库。我的问题是:编译、链接和运行这个项目的命令是什么?我很习惯使用 g++ 从命令行编译项目,但以前从未使用任何外部库(例如 sfml)这样做过。任何帮助将不胜感激。谢谢。

#include <SFML/Window.hpp>

int main()
{
    sf::Window window(sf::VideoMode(800, 600), "My window");
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
    }
    return 0;
}

【问题讨论】:

  • 如果您打算从命令行执行此操作,我建议您熟悉某种类型的构建工具,例如 makecmake
  • 我考虑过用 make 来做,你是否偶然知道 sfml 2.1 的可行 makefile 可能驻留在哪里以便我可以使用它?
  • 你看到这个答案了吗? stackoverflow.com/questions/13263359/…
  • 是的,我在发布这个问题之前看到了这个问题,我没有任何 .a 库文件,只有从 sfml.org 下载的文件。我也没有和他遇到同样的问题,因为我什至不知道如何编译我的简单程序并识别 sfml 库。
  • SFML 包含使用 cmake 构建所需的文件。

标签: c++ g++ mingw sfml


【解决方案1】:

类似的问题:


快速解答

g++ -c main.cpp -IC:\SFML-2.1\include -DSFML_STATIC

g++ main.o -o main -LC:\SFML-2.1\lib -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32

main

长答案

您可以通过两种方式编译、链接和运行 SFML 项目。

  1. 静态链接
  2. 动态链接

这取决于你想做什么。但如果您在本地运行 SFML 项目,两者都可以工作。

我还建议下载latest versionSFML 2.5.1,以及包:GCC 7.3.0 MinGW (DW2) - 32-bit

静态链接

编译项目

首先,使用-c 编译而不是链接您的项目。确保使用-I 包含SFML 头文件。还要使用-D 表示它与SFML_STATIC 的静态链接。

g++ -c main.cpp -IC:\SFML-2.1\include -DSFML_STATIC

链接项目

现在您必须链接 SFML 库。要链接库,请使用 -l 前缀。为方便起见,请链接您最有可能使用的链接:sfml-graphics-ssfml-window-ssfml-system-s。注意它们上的-s 后缀,用于静态链接。

此外,您还必须链接特定模块的某些依赖项。这就是opengl32winmmgdi32 依赖项。同样,使用前缀 -l 链接库。

g++ main.o -o main -LC:\SFML-2.1\lib -lsfml-graphics-s -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32

运行项目

最后,只需在命令行中输入exe 文件的名称:

main

你就完成了!

动态链接

动态链接与静态链接非常相​​似,但有一些重要的区别。

但首先,请确保复制文件 sfml-graphics-2.dllsfml-window-2.dllsfml-system-2.dll,并将它们粘贴到与 main.cpp 文件相同的目录中。如果您还想使用音频或网络,请复制 sfml-audio-2.dllsfml-networking-2.dll 库。

编译项目

使用-c 编译但不链接您的项目。确保包含使用-I 的SFML 头文件。

g++ -c main.cpp -IC:\SFML-2.1\include

链接项目

要链接库,请使用 -l 前缀。为方便起见,请链接您最有可能使用的链接:sfml-graphicssfml-windowsfml-system。请注意,与静态链接不同的是,这些库没有 -s 前缀。

此外,您还必须链接特定模块的某些依赖项。这就是opengl32winmmgdi32 依赖项。同样,使用前缀 -l 链接库。

g++ main.o -o main -LC:\SFML-2.1\lib -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lwinmm -lgdi32

运行项目

只需在命令行中输入exe文件的名称即可:

main

你就完成了!

【讨论】:

    【解决方案2】:

    您可以将 SFML 添加到编译器的路径或使用 g++ -I path/SFML

    【讨论】:

      【解决方案3】:

      Downloads\SFML-2.5.1\include\ 中存在的SFML 文件夹复制到mingw64\lib\gcc\x86_64-w64-mingw32\10.3.0\include\ 这应该使用命令编译您的main.cpp

      g++ main.cpp -c -o main.o

      对于链接,将存在于SFML-2.5.1\lib 的所有.a 文件复制到存在所有不同链接器的msys64\mingw64\lib,这应该链接您的目标文件,使用命令

      g++ main.o -o main.exe -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lwinmm -lgdi32

      然后要运行exe文件,你需要复制.dll文件,为此,将SFML-2.5.1\bin里面的所有文件复制到mingw64\bin,然后打开.exe文件,它应该可以运行了。

      【讨论】:

        猜你喜欢
        • 2018-03-05
        • 2018-03-05
        • 1970-01-01
        • 2019-08-21
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        • 1970-01-01
        • 2020-07-27
        相关资源
        最近更新 更多