WSL2 Ubuntu22.04中PyBullet调用OpenGL失败求助
解决WSL2 Ubuntu 22.04中PyBullet GUI启动失败(OpenGL上下文创建失败)的问题
核心报错指向libGL error: MESA-LOADER: failed to open swrast: /home/dkapur17/anaconda3/envs/drl/lib/libstdc++.so.6: version GLIBCXX_3.4.30' not found,说明Anaconda环境中的libstdc++.so.6`版本不足,无法匹配系统LLVM-15库的依赖要求,导致OpenGL软渲染驱动加载失败,最终无法创建OpenGL上下文。以下是几种可行的解决方法:
方法1:临时优先加载系统的libstdc++库
运行PyBullet脚本前,强制程序使用系统自带的符合版本要求的libstdc++.so.6:
LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 python your_pybullet_script.py
或者先设置环境变量再运行脚本:
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6 python your_pybullet_script.py
方法2:更新Anaconda环境的libstdc++版本
通过conda-forge安装兼容的libstdcxx-ng包,替换环境中的旧版本:
conda activate drl conda install -c conda-forge libstdcxx-ng
安装完成后重新启动PyBullet验证。
方法3:替换Anaconda环境的libstdc++软链接到系统库
如果方法2无效,可直接将Anaconda环境的libstdc++.so.6链接到系统版本:
conda activate drl cd $CONDA_PREFIX/lib # 备份原文件 mv libstdc++.so.6 libstdc++.so.6.bak # 创建软链接到系统库 ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6
方法4:指定PyBullet使用兼容的OpenGL版本
从glxinfo输出可知,系统最高支持OpenGL 4.2版本,可在PyBullet连接时明确指定版本,避免尝试创建过高版本的上下文:
import pybullet as p # 指定使用OpenGL 4.2上下文 p.connect(p.GUI, options="--opengl_version=4")
验证系统libstdc++版本
可先确认系统自带的libstdc++.so.6是否包含GLIBCXX_3.4.30:
strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 | grep GLIBCXX_3.4.30
若输出包含该版本号,说明系统库满足要求,方法1/3即可解决问题。
内容的提问来源于stack exchange,提问作者dkapur17
相关产品推荐
相关产品推荐

