WSL Debian子系统运行OpenGL C程序报freeglut无法打开display错误
报错根因
freeglut (./firstOpenGlApp): failed to open display '' 报错的核心原因是WSL(Windows下的Debian子系统)默认未正确配置X11图形显示服务,Linux侧的GUI程序(包括OpenGL窗口程序)需要将图形输出转发到Windows侧的显示服务才能运行,当前DISPLAY环境变量为空导致freeglut找不到可用的显示设备。
解决步骤
首先确认你的Windows版本和WSL版本,按对应方案配置:
方案1:Win11/最新版Win10(自带WSLg)
这类系统默认已经内置了WSL图形支持,只需配置环境变量即可:
- 临时生效:在当前WSL终端执行命令
export DISPLAY=:0 - 永久生效:将上述命令行添加到
~/.bashrc(bash用户)或~/.zshrc(zsh用户)文件末尾,执行source ~/.bashrc(或对应zsh配置文件)生效 - 安装必要的图形依赖包:
sudo apt update && sudo apt install -y libx11-dev libgl1-mesa-glx libglu1-mesa freeglut3-dev
方案2:旧版Win10(无WSLg)
需要手动在Windows侧安装X11显示服务:
- Windows侧安装VcXsrv等X11服务,启动时勾选「Disable access control」选项,允许WSL的连接请求;如果连接失败可暂时关闭Windows防火墙,或给VcXsrv添加防火墙放行规则
- 回到WSL终端配置DISPLAY环境变量:
- WSL2用户执行:
export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 - WSL1用户执行:
export DISPLAY=localhost:0
- WSL2用户执行:
- 同样将对应配置行添加到shell配置文件实现永久生效,安装方案1里的依赖包即可。
验证&运行
配置完成后可先测试显示功能是否正常:
sudo apt install -y x11-apps xeyes
如果弹出带两个小眼睛的窗口说明配置正常,之后用以下命令编译你的代码运行即可:
gcc Main.c -o firstOpenGlApp -lglut -lGL -lGLU ./firstOpenGlApp
注意编译时必须添加
-lglut -lGL -lGLU参数链接对应的图形库,否则会出现编译阶段的符号未找到报错。
内容的提问来源于stack exchange,提问作者Bjørn Pollen
相关产品推荐
相关产品推荐

