【libGL error】Autodl云服务器配置ACT的conda虚拟环境生成训练数据时,遇到了libGL相关错误,涉及swrast_dri.so

news/2024/10/30 22:02:57/

问题与解决方案

1. libGL error: MESA-LOADER: failed to open iris

conda install -c conda-forge libstdcxx-ng

来源suffix _dri

conda_10">下面的问题是在Autodl云服务器上运行程序是出现的,在Ubuntu笔记本上安装的Anaconda没有出现以下问题。

Autodl云服务器安装的是Miniconda3基础镜像,框架版本conda3,python版本3.10(Ubuntu22.04),Cuda版本11.8。

2. libGL error: MESA-LOADER: failed to open swrast: /usr/lib/dri/swrast_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/x86_64-linux-gnu/dri:$${ORIGIN}/dri:/usr/lib/dri, suffix _dri)
cd  /usr/lib/
sudo mkdir dri
cd dri
sudo ln -s  /lib/x86_64-linux-gnu/dri/swrast_dri.so    swrast_dri.so

sudo ln -s /lib/x86_64-linux-gnu/dri/swrast_dri.so swrast_dri.so

  • 命令功能ln -s 用于创建一个符号链接(软链接)。
  • 目的:这个命令将在当前工作目录中创建一个名为 swrast_dri.so 的符号链接,指向 /lib/x86_64-linux-gnu/dri/swrast_dri.so 文件。这样,你可以通过 swrast_dri.so 来访问原始文件,而不必使用完整路径。
  • 注意:这个命令会在当前目录中创建一个新文件(链接),如果 swrast_dri.so 文件已经存在,则会出错。
3. `GLIBCXX_3.4.30’ not found

libGL error: MESA-LOADER: failed to open swrast: /root/miniconda3/envs/act_a1/bin/…/lib/libstdc++.so.6: version `GLIBCXX_3.4.30’ not found (required by /usr/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)

 conda install -c conda-forge gcc
  • conda:调用 Conda 包管理工具。
  • install:安装软件包。
  • -c conda-forge:指定安装源为 conda-forge 频道。conda-forge 是一个提供大量开源软件包的社区驱动频道,通常包含一些官方频道没有的软件包版本。
  • gcc:要安装的软件包名称。在这里是 gcc,即 GNU 编译器集合(GNU Compiler Collection),主要包含 C、C++ 等编程语言的编译器。

conda install -c conda-forge gcc 这个命令的作用是从 conda-forge 频道中安装 gcc 编译器。这样可以确保你在 Conda 环境中获得合适的 GCC 版本,用于编译 C/C++ 程序或安装需要编译的其他软件包。

4. /libstdc++.so.6: version `CXXABI_1.3.8’ not found

libGL error: MESA-LOADER: failed to open swrast: /root/miniconda3/envs/act_a1/bin/…/lib/libstdc++.so.6: version `CXXABI_1.3.8’ not found (required by /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

服务器安装的是miniconda3

在这里插入图片描述

 vi  ~/.bashrc

在文件中添加如下代码

(将anaconda3库文件路径添加到系统的库文件路径中)

LD_LIBRARY_PATH=/root/miniconda3/lib:$LD_LIBRARY_PATH     
export LD_LIBRARY_PATH

在这里插入图片描述

vi中的基本编辑操作:

  1. 打开文件vi filename

  2. 进入插入模式并开始编辑

    • 按下 i 键进入插入模式。
    • 输入或编辑文本内容。
  3. 保存并退出

    • Esc 键退出插入模式,回到命令模式。
    • 输入 :wq,然后按 Enter 键即可保存并退出。
source  ~/.bashrc

在这里插入图片描述
用系统的libstdc++库替换miniconda3环境中的库,避免不同版本之间的兼容性问题。这种方法通常用于解决由于不同libstdc++版本引起的兼容问题,尤其在使用一些依赖C++标准库的包时效果显著。

  • 进入miniconda3lib目录

    cd ~/miniconda3/lib
    

    切换到miniconda3安装目录下的lib文件夹,这是miniconda3环境中存放库文件的地方。

  • 创建备份文件夹

    mkdir backup 
    

    创建一个名为backup的新文件夹,用于保存当前目录下原有的libstdc++文件,以便需要时可以还原。

  • 将原有的libstdc++文件移动到备份文件夹

    mv libstd* backup  
    

    将所有以libstd开头的文件(包含libstdc++库文件及其符号链接)移动到backup文件夹中。

  • 从系统目录复制libstdc++.so.6到当前目录

    cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 ./
    

    从系统目录(如/usr/lib/x86_64-linux-gnu)复制系统版本的libstdc++.so.6到当前目录下,以便miniconda3环境使用系统的libstdc++库文件。

  • 创建符号链接libstdc++.so指向libstdc++.so.6

    ln -s libstdc++.so.6 libstdc++.so
    

    创建符号链接libstdc++.so,指向刚复制的libstdc++.so.6,以确保程序能够找到libstdc++库的主要链接文件。

  • 创建符号链接libstdc++.so.6.0.19指向libstdc++.so.6

    ln -s libstdc++.so.6 libstdc++.so.6.0.19
    

    创建符号链接libstdc++.so.6.0.19,指向libstdc++.so.6,以确保程序在寻找特定版本6.0.19libstdc++时能够正常找到这个库文件。

使用strings命令查看libstdc++.so.6.0.19文件中的字符串,并通过grep筛选出包含CXXABI的行。这一步是为了确认当前库的C++ ABI版本号,与其他依赖库的ABI兼容性。

strings ~/miniconda3/lib/libstdc++.so.6.0.19 | grep CXXABI

在这里插入图片描述

sudo cp ~/miniconda3/lib/libstdc++.so.6.0.19 /root/miniconda3/envs/act_a1/bin/../lib
cd /root/miniconda3/envs/act_a1/bin/../lib
ls
sudo ln -s libstdc++.so.6.0.19  libstdc++.so.6
  • libstdc++.so.6.0.19复制到另一个环境的lib目录

    • sudo cp ~/miniconda3/lib/libstdc++.so.6.0.19 /root/miniconda3/envs/act_a1/bin/../lib
      把刚替换后的libstdc++.so.6.0.19文件复制到act_a1环境的lib目录。
  • 创建libstdc++.so.6的符号链接

    • sudo ln -s libstdc++.so.6.0.19 libstdc++.so.6
      act_a1环境的lib目录中,创建一个符号链接libstdc++.so.6,指向libstdc++.so.6.0.19,确保程序在查找libstdc++.so.6时能找到这个特定的版本。

再次检查C++ ABI版本,确保在act_a1环境中的新库的C++ ABI版本号符合需求,避免不兼容问题。

strings /root/miniconda3/envs/act_a1/bin/../lib/libstdc++.so.6 | grep CXXABI

在这里插入图片描述

5.在远程服务器或无显示设备的环境中 Mujoco 试图渲染图像时遇到了 gladLoadGL error,并且 GLFW 报告 X11 显示环境变量 DISPLAY 缺失

/root/miniconda3/envs/act_a1/lib/python3.8/site-packages/glfw/init.py:914: GLFWError: (65544) b’X11: The DISPLAY environment variable is missing’
warnings.warn(message, GLFWError)
episode_idx=0
Rollout out EE space scripted policy
/root/miniconda3/envs/act_a1/lib/python3.8/site-packages/glfw/init.py:914: GLFWError: (65537) b’The GLFW library is not initialized’
warnings.warn(message, GLFWError)

使用EGL作为渲染后端
在云服务器上,EGL是一种常见的无屏幕(headless)渲染解决方案,适合在没有物理显示器的环境中调用GPU进行渲染。
设置环境变量让MuJoCo等渲染库使用EGL:

export MUJOCO_GL=egl

http://www.ppmy.cn/news/1543199.html

相关文章

代码随想录-字符串-替换数字

题目与解析 考察的小技巧有点多,整体思路除了双指针之外,其他的都有点僵硬,不能算是太有共性的题型 代码解析 import java.util.Scanner; public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System…

什么是栈溢出

一、什么是栈溢出 栈溢出(Stack Overflow)就是指在程序运行过程中,往栈里存放的数据超过了栈所能容纳的最大容量,从而导致程序出现异常行为的情况。这就好比一个箱子本来只能装一定数量的物品,硬要往里面塞更多的东西&…

Unity(四十八):Unity与Web双向交互

效果 游戏对象绑定脚本 游戏脚本源码 using System.Collections; using System.Collections.Generic; using UnityEngine;public class Tent : MonoBehaviour {public Camera camera;// Start is called before the first frame updatevoid Start(){}// Update is called once…

行为设计模式 -命令模式- JAVA

命令模式 一.简介二. 案例2.1 接收者(Receiver)2.2 命令接口实现对象(ConcreteCommand)2.3 调用者( invoker)2.4 获取Receiver对象2. 5 装配者客户端测试 三. 结论3.1 要点3.2 示例 前言 本设计模式专栏写了…

初识Linux · 动静态库(incomplete)

目录 前言: 静态库 动态库 前言: 继上文,我们从磁盘的理解,到了文件系统框架的基本搭建,再到软硬链接部分,我们开始逐渐理解了为什么运行程序需要./a.out了,这个前面的.是什么我们也知道了。…

我用这个 AI 工具生成单元测试,爽的一批!

本文分享如何使用驭码CodeRider 的单元测试功能生成单元测试文件。 在之前的文章如何用 Python 手撸一个 GitLab 代码安全审查工具?中,我用 Python 写了一个接受极狐GitLab 代码安全审计事件流并且将消息推送到钉钉群的脚本,完整的 python 代…

220V降12V1A恒流点灯WT5112

220V降12V1A恒流点灯WT5112 芯片特点 高精度恒流输出:WT5112 是一款适用于非隔离降压型恒流 LED 驱动芯片。在 220V 降 12V、1A 恒流点灯应用中,它能够提供高精度的恒流输出。其恒流精度通常可以达到 3% - 5% 左右,这对于 LED 灯的稳定发光非…

SQLAlchemy 连接 dm

参考链接 SQLAlchemy 框架 | 达梦技术文档 如果密码中出现特殊字符,参考SQLAlchemy 链接数据库,密码中含有或者\特殊字符_python sqlalchemy 连接mysql 密码有特殊字符-CSDN博客 问题:ObjectNotExecutableError: Not an executable object: …