VS2022中使用SFML编写C++窗口代码出现错误,请求协助排查原因
VS2022中使用SFML编写C++窗口代码出现错误,请求协助排查原因
各位好,我在VS2022里尝试用SFML写一个简单的窗口程序,但运行后遇到了错误,完全摸不着头脑,想请大家帮忙排查下问题!
我写的代码如下:
//important libraries #include <iostream> #include <SFML/Graphics.hpp> using namespace sf; //start of game int main() { VideoMode vm(1920, 1080); RenderWindow window(vm, "Timber!!!", Style::Fullscreen); return 0; }
我原本预期会弹出一个标题为“Timber!!!”的全屏窗口,但实际运行后出现了错误。我已经仔细检查过引用的SFML头文件,里面的内容都是我需要的,实在搞不懂为什么编译器没办法正确识别并编译通过。
以下是一些可能的排查方向,供你参考:
- 链接器库未配置:VS2022中仅包含头文件是不够的,还需要在项目属性的「链接器 -> 输入 -> 附加依赖项」里添加对应的SFML库文件。注意区分Debug和Release版本:Debug模式下要加带
-d后缀的库(比如sfml-graphics-d.lib、sfml-window-d.lib、sfml-system-d.lib),Release模式则用不带后缀的版本(sfml-graphics.lib、sfml-window.lib、sfml-system.lib)。 - 版本兼容性问题:确保你下载的SFML是适配VS2022的版本(对应VC17工具集),同时项目的平台(32位/64位)要和SFML的版本完全匹配,32位项目别用64位SFML,反之亦然。
- 运行时库不匹配:项目属性中「C/C++ -> 代码生成 -> 运行时库」的设置,要和SFML编译时使用的运行时库一致。比如SFML如果是用
MD(多线程DLL)编译的,你的项目也得设成MD,不能用MT。 - 缺少运行时DLL:如果是直接运行生成的可执行文件,需要把SFML对应的DLL文件放到exe同目录下。Debug模式用带
-d的DLL,Release模式用普通DLL,比如sfml-system-2.dll、sfml-window-2.dll、sfml-graphics-2.dll这些。 - 代码逻辑小问题:你的代码创建窗口后直接
return 0了,就算编译通过,窗口也会一闪而过。正确的写法应该加上主循环来维持窗口运行,比如:while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); // 这里可以添加绘制内容的代码 window.display(); }
内容来源于stack exchange




