我有一个简单的文件“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
。
此外,您还必须为库链接某些依赖项。那就是 opengl32
、winmm
和 gdi32
库。同样,使用前缀 -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/