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

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图形支持,只需配置环境变量即可:

  1. 临时生效:在当前WSL终端执行命令
    export DISPLAY=:0
    
  2. 永久生效:将上述命令行添加到~/.bashrc(bash用户)或~/.zshrc(zsh用户)文件末尾,执行source ~/.bashrc(或对应zsh配置文件)生效
  3. 安装必要的图形依赖包:
    sudo apt update && sudo apt install -y libx11-dev libgl1-mesa-glx libglu1-mesa freeglut3-dev
    

方案2:旧版Win10(无WSLg)

需要手动在Windows侧安装X11显示服务:

  1. Windows侧安装VcXsrv等X11服务,启动时勾选「Disable access control」选项,允许WSL的连接请求;如果连接失败可暂时关闭Windows防火墙,或给VcXsrv添加防火墙放行规则
  2. 回到WSL终端配置DISPLAY环境变量:
    • WSL2用户执行:
      export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0
      
    • WSL1用户执行:
      export DISPLAY=localhost:0
      
  3. 同样将对应配置行添加到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:45:05