从本质上讲,试图编写以下代码会导致以下错误:
代码
from matplotlib import pyplot as plt
plt.plot([1,2,3,2,1])
plt.show()错误
libGL error: MESA-LOADER: failed to open iris: /home/xxx/.conda/envs/stat/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/lib64/dri/iris_dri.so) (search paths /usr/lib64/dri, suffix _dri)
libGL error: failed to load driver: iris
libGL error: MESA-LOADER: failed to open swrast: /home/xxx/.conda/envs/stat/lib/python3.8/site-packages/pandas/_libs/window/../../../../../libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /usr/lib64/dri/swrast_dri.so) (search paths /usr/lib64/dri, suffix _dri)
libGL error: failed to load driver: swrast我在StackOverflow上发现了类似的错误,但是这里没有一个是需要的。
发布于 2022-02-06 18:29:23
简短回答:export LD_PRELOAD=/usr/lib64/libstdc++.so.6
较长的答覆:
根本的问题是,我们有一个软件,它是用一个较旧的C++编译器构建的。编译器的一部分是它的libstdc++实现,它成为编译器构建的任何东西的运行时需求的一部分。显然,该软件带来了它自己的、更老的libstdc++实现,并且它的libstdc++优先于系统的libstdc++。通常,这是通过$LD_LIBRARY_PATH环境变量完成的。不幸的是,/usr/lib64/dri/swrast_dri.so是由本机编译器为该系统构建的一种系统软件,它比构建其他软件的编译器更新。这样做的结果是,旧编译器的libstdc++首先被加载,其较旧的、更有限的符号集。当它想要加载swrast时,这会失败,因为swrast坚持使用编译器/运行时级别来构建它。解决这一混乱的办法是强制使用系统的(较新的) libstdc++,并防止旧的libstdc++发挥作用。这是通过代码片段export LD_PRELOAD=/usr/lib64/libstdc++.so.6实现的,我们在其中设置预加载环境变量。
发布于 2022-05-11 12:02:58
马海尔·米尔希德提出的解决方案是为我工作的。在我的系统(Ubuntu22.04)中,libstdc++.so.6文件位于/usr/lib/x86_64-linux-gnu/libstdc++.so.6中,我建议运行以下命令:
find / -name libstdc++.so.6 2>/dev/null它产生的文件来自miniconda、snap和/usr/lib/.我将导出LD_PRELOAD添加到我的.bashrc文件中,它运行良好。
export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libstdc++.so.6发布于 2022-03-10 08:58:39
从conda安装libstdcxx-ng应该可以解决这个问题。
命令:
conda install -c conda-forge libstdcxx-nghttps://stackoverflow.com/questions/71010343
复制相似问题