Qui*_*ugh 7 c++ mingw g++ 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;
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我将向您展示如何静态或动态链接项目。如果您在计算机上运行该项目,选择执行哪一个并不重要,但如果您想将可执行文件发送到另一台设备,请选择静态链接。
编译工程
首先,使用该标志编译但不链接您的项目-c。确保使用-I前缀包含 SFML 头文件。
如果您要静态链接 SFML,请包括SFML_STATIC使用该-D标志。
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
Run Code Online (Sandbox Code Playgroud)
链接项目
现在您必须链接 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++ -c main.cpp -IC:\SFML-2.1\include
// static linking
g++ -c main.cpp -IC:\SFML-2.1\include -DSFML_STATIC
Run Code Online (Sandbox Code Playgroud)
运行项目
最后,只需在命令行中输入可执行文件的名称:
main
Run Code Online (Sandbox Code Playgroud)
你就完成了!