You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SDL2窗口无法显示求助(WSL Ubuntu 20.05.6环境)

WSL Ubuntu下SDL2窗口不显示问题的解决办法

问题根因

WSL本身不带图形环境,SDL2的窗口需要依赖Windows端的X服务器来渲染。如果没配置好X转发,程序能正常编译运行,但窗口就是无法显示,任务栏也不会出现对应图标。

具体解决步骤

1. 安装Windows端X服务器

  • 下载并安装VcXsrv或Xming这类X服务器工具。
  • 启动X服务器时,必须勾选Disable access control(禁用访问控制),否则WSL中的程序无法连接到X服务器。

2. 配置WSL的DISPLAY环境变量

打开WSL终端,先临时设置环境变量:

export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0

若想永久生效,把上述命令添加到~/.bashrc或~/.zshrc文件末尾,再执行source ~/.bashrc让设置立即生效。

3. 补全SDL2图形依赖包

确保WSL中已安装SDL2的必要图形依赖:

sudo apt install libsdl2-2.0-0 libsdl2-dev

如果仍无法显示,运行程序前强制指定SDL使用X11后端:

export SDL_VIDEODRIVER=x11

4. 代码小优化(可选)

  • 创建窗口时添加SDL_WINDOW_OPENGL标志,明确SDL的图形后端:
mWindow = SDL_CreateWindow(
    "Test",
    100,
    100,
    1024,
    768,
    SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL
);
  • 你的GenerateOutput方法为空,SDL需要主动刷新窗口,可补充内容:
void Game::GenerateOutput() {
    SDL_Surface* surface = SDL_GetWindowSurface(mWindow);
    SDL_FillRect(surface, NULL, SDL_MapRGB(surface->format, 0, 0, 0)); // 填充黑色背景
    SDL_UpdateWindowSurface(mWindow);
}

验证

完成配置后重新编译运行程序,即可在X服务器中看到SDL窗口,任务栏也会出现对应图标。

内容的提问来源于stack exchange,提问作者lnz43090

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 04:06:16