如何使用MinGW编译SFML?

7

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

如果你想从命令行执行,我建议你熟悉一些构建工具,比如 make 或者 cmake - Captain Obvlious
我考虑使用make来完成它,你是否知道一个可行的SFML 2.1 makefile可能存在的位置,以便我可以利用它? - Quinn McHugh
你看到这个答案了吗?http://stackoverflow.com/questions/13263359/using-mingw-to-compile-a-sfml-project - Jimmy
是的,在发布这个问题之前,我看到了那个问题,并且我没有任何.a库文件,只有从sfml.org下载时附带的文件。我和他遇到的问题也不一样,因为我甚至不知道如何编译我的简单程序以使sfml库被识别。 - Quinn McHugh
SFML 包含了用于与 cmake 构建所需文件。 - Captain Obvlious
3个回答

5

快速回答

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

长答案

我将向您展示如何静态或动态地链接项目。如果您在自己的计算机上运行项目,无论您选择哪种方式都没有关系,但是如果您想将可执行文件发送到另一台设备,请选择静态链接。

编译项目

首先,使用-c标志编译您的项目,但不要链接。确保使用-I前缀包含SFML头文件。

如果您要静态链接SFML,请使用-D标志包含SFML_STATIC

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

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

连接项目

现在您需要链接SFML库。要链接库,请使用-l前缀。为方便起见,链接您最有可能使用的库:-lsfml-graphics-lsfml-window-ssfml-system

如果您正在进行静态链接,请在库名前加上-s前缀:-lsfml-graphics-s-lsfml-window-s-lsfml-system-s

您还需要链接某些库的依赖项,这些库是opengl32winmmgdi32。同样,使用-l前缀来链接这些库(即使您正在进行静态链接,也无需在这些库上使用-s后缀)。

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

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

运行项目

最后,在命令行中输入可执行文件的名称:

main

完成了!

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 文件即可运行。

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接