【问题标题】:Cannot load `swrast` and `iris` drivers in Fedora 35无法在 Fedora 35 中加载 `swrast` 和 `iris` 驱动程序
【发布时间】:2022-02-06 18:29:23
【问题描述】:

基本上,尝试编写以下代码会导致以下错误:

代码

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 上发现了类似的错误,但这里不需要。

【问题讨论】:

    标签: python conda driver fedora


    【解决方案1】:

    简答: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++ 发挥作用。这是通过代码 sn -p export LD_PRELOAD=/usr/lib64/libstdc++.so.6 实现的,我们在其中设置了预加载环境变量。

    【讨论】:

    • 这听起来像是绕过了实际的潜在问题。听起来更像是 conda 安装和/或应该指向 conda 目录的路径有问题
    • @FlyingTeller,如果您有任何建议,请随时回答问题。否则,与其他人在网上建议的离谱解决方案相比,这是我能找到的最佳解决方案。
    【解决方案2】:

    从 conda-forge 安装 libstdcxx-ng 应该可以解决这个问题。

    命令:

    conda install -c conda-forge libstdcxx-ng
    

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 2017-10-25
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多