如何使用MinGW编译SFML?

时间:2014-04-30 20:34:00

标签: c++ g++ mingw sfml

我有一个简单的文件" 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;
}

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

类似问题:


快速解答

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 项目,则两者都可以。

我还建议下载 MingW static library linking - SFML 2.1 SFML 2.5.1 和软件包:GCC 7.3.0 MinGW (DW2) - 32-bit

静态链接

编译项目

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

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

大功告成!