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

eglInitialize调用失败报EGL_NOT_INITIALIZED错误,如何解决?

问题

运行基于EGL的3D人体模型生成器时,执行以下代码出现eglInitialize失败的错误:

import OpenGL.EGL as egl
from ctypes import pointer

egl_display = egl.eglGetDisplay(egl.EGL_DEFAULT_DISPLAY)
print(egl_display)

major, minor = egl.EGLint(), egl.EGLint()
print(major, minor)

egl.eglInitialize(egl_display, pointer(major), pointer(minor))

输出信息如下:

#################### the first two print info ####################
<OpenGL._opaque.EGLDisplay_pointer object at 0x7f480e971940>
c_int(0) c_int(0)

#################### error ####################
Traceback (most recent call last):
  File "main.py", line 10, in <module>
    egl.eglInitialize(egl_display, pointer(major), pointer(minor))
  File "/data_HDD/zhuxingyu/anaconda3/envs/icon/lib/python3.8/site-packages/OpenGL/platform/baseplatform.py", line 415, in __call__
    return self( *args, **named )
  File "src/errorchecker.pyx", line 58, in OpenGL_accelerate.errorchecker._ErrorChecker.glCheckError
OpenGL.raw.EGL._errors.EGLError: EGLError(
        err = EGL_NOT_INITIALIZED,
        baseOperation = eglInitialize,
        cArguments = (
                <OpenGL._opaque.EGLDisplay_pointer object at 0x7f480e971940>,
                <OpenGL.raw.EGL._types.LP_c_int object at 0x7f480e971ac0>,
                <OpenGL.raw.EGL._types.LP_c_int object at 0x7f480e971b40>,
        ),
        result = 0
)

运行代码的机器B信息:

  • 配备5块NVIDIA GeForce GPU,CUDA版本11.4,驱动版本470.82.00(来自nvidia-smi);
  • 已安装libegl1,/usr/lib/x86_64-linux-gnu/下存在相关.so文件:
/usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0
/usr/lib/x86_64-linux-gnu/libEGL_mesa.so.0.0.0
/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.0
/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.470.82.00
/usr/lib/x86_64-linux-gnu/libEGL.so
/usr/lib/x86_64-linux-gnu/libEGL.so.1
/usr/lib/x86_64-linux-gnu/libEGL.so.1.0.0
  • 通过VSCode远程SSH在机器B上运行代码,本地操作机器为A。

需要进行哪些配置或操作才能让eglInitialize正常运行?

解决建议
  • 指定NVIDIA EGL库加载:系统可能优先使用Mesa的EGL库,通过环境变量强制指定NVIDIA版本:

    export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.470.82.00
    

    或者在Python代码开头添加:

    import os
    os.environ['LD_PRELOAD'] = '/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.470.82.00'
    
  • 配置虚拟显示环境:远程SSH无物理显示器,需借助虚拟显示:

    1. 安装xvfb服务:
      sudo apt install xvfb
      
    2. 用xvfb包裹代码运行:
      xvfb-run -a python main.py
      

    或者使用pyvirtualdisplay库在代码中初始化虚拟显示:

    pip install pyvirtualdisplay
    

    修改代码:

    from pyvirtualdisplay import Display
    display = Display(visible=0, size=(1920, 1080))
    display.start()
    
    # 原EGL代码段
    
    display.stop()
    
  • 指定目标GPU设备:多GPU环境下,明确指定要使用的GPU:

    export CUDA_VISIBLE_DEVICES=0
    

    或在代码中设置:

    import os
    os.environ['CUDA_VISIBLE_DEVICES'] = '0'
    
  • 调整EGL显示获取方式:尝试使用平台设备扩展获取显示句柄,替代默认显示:

    import OpenGL.EGL as egl
    from ctypes import pointer
    
    # 初始化平台设备扩展
    egl.eglInitializePlatformDisplayEXT(egl.EGL_PLATFORM_DEVICE_EXT, None, None)
    egl_display = egl.eglGetDisplay(egl.EGL_PLATFORM_DEVICE_EXT)
    
    major, minor = egl.EGLint(), egl.EGLint()
    egl.eglInitialize(egl_display, pointer(major), pointer(minor))
    
  • 验证EGL库加载状态:检查当前Python进程加载的EGL库:

    ldd $(which python) | grep EGL
    

    若输出为Mesa库,说明需要调整LD_PRELOAD或系统库优先级。

内容的提问来源于stack exchange,提问作者K. Zhu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:18:28