Windows11下MobaXTerm运行WSL2中SFML程序报错求助
WSL2 + MobaXTerm 运行SFML代码报错的解决办法
针对你遇到的Setting vertical sync not supported和X连接断开问题,可按以下步骤尝试解决:
1. 禁用垂直同步
MobaXTerm的X服务器大多不支持垂直同步,直接在代码里关闭该特性即可:
修改main函数中创建窗口后的代码,添加禁用垂直同步的语句:
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); window.setVerticalSyncEnabled(false); // 新增这行,关闭垂直同步 sf::CircleShape shape(100.f);
2. 调整DISPLAY环境变量配置
替换.bashrc里的自动获取IP配置,改用更稳定的localhost地址:
# 删掉原来的DISPLAY配置,替换成下面两行 export DISPLAY=localhost:0.0 export LIBGL_ALWAYS_INDIRECT=0
修改后执行source ~/.bashrc让配置立即生效,或者重启MobaXTerm终端。
同时确认MobaXTerm的X服务器处于激活状态:打开MobaXTerm后,顶部状态栏的X图标应为彩色(灰色代表未开启)。
3. 强制SFML使用X11后端编译
编译时添加编译宏,指定SFML使用X11后端,避免兼容性问题:
g++ main.cpp -o sfml-app -DSFML_BACKEND_X11 -L<sfml-install-path>/lib -lsfml-graphics -lsfml-window -lsfml-system
注意:这里直接编译.cpp文件,确保编译时就应用X11后端的配置。
4. 更新组件版本
- 把MobaXTerm升级到最新版本,旧版X服务器可能存在WSL2兼容性Bug。
- 在Windows命令提示符/PowerShell中执行
wsl --update,更新WSL2的内核和组件。
内容的提问来源于stack exchange,提问作者AlwaysJona
相关产品推荐
相关产品推荐

