系统配置
操作系统:Ubuntu 22.04.5 LTS
Python:3.10
Conda环境:Miniforge3
Python报错:libGL error: MESA-LOADER: failed to open iris
问题状况:
libGL error: MESA-LOADER: failed to open iris: /usr/lib/dri/iris_dri.so: 无法打开共享目标文件: 没有那个文件或目录 (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open iris: /usr/lib/dri/iris_dri.so: 无法打开共享目标文件: 没有那个文件或目录 (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: 无法打开共享目标文件: 没有那个文件或目录 (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast问题分析
根据提示,发现是在 /usr/lib/dri 路径下没有找到系统驱动,但是在 /usr/lib/x86_64-linux-gnu/dri 路径下是可以找到相关驱动的。
解决方案
因此可以通过建立软连接的方式来解决问题,执行以下命令:
cd /usr/lib
sudo mkdir ./dri
sudo ln -s /usr/lib/x86_64-linux-gnu/dri/iris_dri.so /usr/lib/dri/
sudo ln -s /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so /usr/lib/dri/
Anaconda报错:libGL error: MESA-LOADER: failed to open iris问题状况
接着再次运行代码,发现程序又开始报错:
libGL error: MESA-LOADER: failed to open iris: /home/myur/software/anaconda3/envs/py38/lib/python3.8/site-packages/PIL/../../../././libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-15.so.1) (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open iris: /home/myur/software/anaconda3/envs/py38/lib/python3.8/site-packages/PIL/../../../././libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-15.so.1) (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast: /home/myur/software/anaconda3/envs/py38/lib/python3.8/site-packages/PIL/../../../././libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libLLVM-15.so.1) (search paths /usr/lib/x86_64-linux-gnu/dri:\$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
libGL error: failed to load driver: swrast问题分析
根据提示发现是在/home/myur/software/anaconda3/envs/py38/lib/python3.8/site-packages/PIL/../../../././libstdc++.so.6路径下的文件中没有找到 GLIBCXX_3.4.30 版本。
经查阅网络文档及各方博客后,发现问题是因为在该conda环境下的libstdcxx-ng版本不够高,没有 GLIBCXX_3.4.30 版本所导致的。
我们首先执行以下命令来查看GLIBCXX版本信息:
strings /home/myur/software/anaconda3/envs/py38/lib/libstdc++.so.6 | grep GLIBCXX没有发现文件中存在 GLIBCXX_3.4.30 版本:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
……
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29通过以下命令先查看该conda环境下libstdcxx-ng版本号是多少(注:本conda环境名为py38,请自行将环境名替换成自己的conda环境名):
conda list -n py310 | grep libstdcxx-ng发现该conda环境下libstdcxx-ng版本号为11.2.0。
libstdcxx-ng 11.2.0 h1234567_1解决方案
Step1 添加下载源
直接通过默认源是无法升级安装libstdcxx-ng的,需要先添加conda-forge源,执行以下命令:
conda config --add channels conda-forge可以执行以下命令来查看下载源:
conda config --show channelsStep2 升级libstdcxx-ng
激活需要升级安装libstdcxx-ng的环境,执行以下命令:
conda activate py310激活环境后,执行升级安装的命令:
conda install libstdcxx-ng=12.1.0等待升级安装完成后,再执行以下命令来查看GLIBCXX版本信息:
strings /home/myur/software/anaconda3/envs/py38/lib/libstdc++.so.6 | grep GLIBCXX发现出现了 GLIBCXX_3.4.30 版本:
GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
……
GLIBCXX_3.4.27
GLIBCXX_3.4.28
GLIBCXX_3.4.29
GLIBCXX_3.4.30此时再次运行程序,程序不再报错。
另一个解决思路
参照文中【Python报错:libGL error: MESA-LOADER: failed to open iris】解决方案,在对应的目录下,构建软链接。
由于本文档中的问题已解决,不再尝试。
参考文章
https://zhuanlan.zhihu.com/p/538877347
https://www.bilibili.com/opus/702394618087473169
https://blog.csdn.net/peng_258/article/details/132500323
https://blog.csdn.net/quintus0505/article/details/130758022