我有一个简单的文件" 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;
}
答案 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 项目。
这取决于你想做什么。但是,如果您在本地运行 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-s
、sfml-window-s
和 sfml-system-s
。注意它们的 -s
后缀用于静态链接。
此外,您还必须链接特定模块的某些依赖项。这就是 opengl32
、winmm
和 gdi32
依赖项。再次使用前缀 -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.dll
、sfml-window-2.dll
和 sfml-system-2.dll
并将它们粘贴到与 main.cpp
文件相同的目录中。如果您还想使用音频或网络,请复制 sfml-audio-2.dll
和 sfml-networking-2.dll
库。
编译项目
使用 -c
编译但不链接您的项目。确保使用 -I
包含 SFML 头文件。
g++ -c main.cpp -IC:\SFML-2.1\include
链接项目
要链接库,请使用 -l
前缀。为方便起见,链接您最有可能使用的那些:sfml-graphics
、sfml-window
和 sfml-system
。请注意,与静态链接不同的是,这些库没有 -s
前缀。
此外,您还必须链接特定模块的某些依赖项。这就是 opengl32
、winmm
和 gdi32
依赖项。再次使用前缀 -l
链接库。
g++ main.o -o main -LC:\SFML-2.1\lib -lsfml-graphics -lsfml-window -lsfml-system -lopengl32 -lwinmm -lgdi32
运行项目
只需在命令行中输入 exe
文件的名称:
main
大功告成!