c++ - 如何用 MinGW 编译 SFML?

标签 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;
}

最佳答案

快速回答

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

运行项目

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

main

大功告成!

关于c++ - 如何用 MinGW 编译 SFML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23397536/

相关文章:

c++ - 删除指针和将其设置为 nullptr 之间有什么区别?

g++ - 如何修复这个 Makefile

c++ - 用于增加 "vector<pair>"值的优雅而高效的算法

c++ - 通过 PATH env 启动程序。变种。有正确的工作目录

c++ - Qt::Popup 破坏 QScroller 动态滚动?

opencv - 无法识别的命令行选项 '-stdlib=libstdc++'

c++ - 一般 C++ Linux 到 Windows 移植问题

c++ - 使用 Codelite IDE 和 Ubuntu 执行格式错误

bash - 在 Windows 64 位 :/usr/bin/sh: -c: line 0: syntax error near unexpected token `make` 的 cygwin 上使用 `(' 时出错

c - 编译代码时出现 atof 冲突