libGL error: MESA-LOADER: failed to open swrast: /lib/x86_64-linux-gnu/libLLVM-12.so.1: undefined symbol: ffi_type_sint32, version LIBFFI_BASE_7.0

libGL error: MESA-LOADER: failed to open swrast: /lib/x86_64-linux-gnu/libLLVM-12.so.1: undefined symbol: ffi_type_sint32, version LIBFFI_BASE_7.0 (search paths /home/xxx/my_lib/dri, suffix _dri)
libGL error: failed to load driver: swrast
[Open3D WARNING] GLFW Error: GLX: Failed to create context: GLXBadFBConfig
[Open3D WARNING] Failed to create window
Segmentation fault (core dumped)

export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libffi.so.7
上面就是唯一的解决方法,放进.bashrc即可

短短一个月遇到俩次这个错误,之前把conceptgraph环境又重装一次,这次同样的错误同样出现

报错日志 本质原因
libGL error: failed to open swrast Mesa 软件渲染器加载失败(通常是 libLLVM + libffi 不兼容)
GLFW Error: GLX: Failed to create context Open3D 内部通过 GLFW 创建 OpenGL 上下文失败
Segmentation fault Open3D 没有处理好失败,直接崩溃了
mamba install -c conda-forge    libglx   libglu   libffi    libxcb   llvm-openmp

然后加上环境变量

export LIBGL_ALWAYS_SOFTWARE=1
export LIBGL_DRIVERS_PATH=$CONDA_PREFIX/lib/dri
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

❌ 系统 OpenGL 依赖冲突 libLLVM、libffi、libGL.so 版本对不上
❌ Conda + 系统混用 导致找错 .so 路径、缺符号、段错误

ls /usr/lib/x86_64-linux-gnu/libLLVM*
ls /usr/lib/x86_64-linux-gnu/libffi*

/usr/lib/x86_64-linux-gnu/libLLVM-6.0.so
/usr/lib/x86_64-linux-gnu/libLLVM-10.so
/usr/lib/x86_64-linux-gnu/libLLVM-12.so ← 报错用的是这个
系统中有 LLVM 6.0、10.0、12.0 版本共存
OpenGL 加载 Mesa 的软件渲染器 swrast 时动态链接到了 libLLVM-12.so.1,但此时 libffi 却找不到 ffi_type_sint32(符号版本不匹配)

/usr/lib/x86_64-linux-gnu/libffi.so.7
/usr/lib/x86_64-linux-gnu/libffi.so.7.1.0
这意味着当前 Mesa 要的可能是 libffi.so.8 或更新版,但你系统只安装了 7.1.0
所以当 Mesa 尝试调用 ffi_type_sint32 时报错:找不到 symbol(符号)

mamba install -c conda-forge mesa-libgl
ls $CONDA_PREFIX/lib/dri/swrast_dri.so
✅ libGL*.so 都走的是 Conda 路径 非常好
❌ swrast_dri.so 缺失 当前的关键问题
✅ 安装 mesa-dri-drivers 一步到位解决
✅ 设置环境变量 确保加载优先级

🧠 你这个图里暴露了根本问题:

你的 Conda 环境中确实缺失关键的 OpenGL 软件渲染驱动:swrast_dri.so
所以 Open3D 初始化失败 + Segmentation fault 是“后果”,而不是根本原因。


✅ 图像中的关键点解释:

  • $CONDA_PREFIX/lib/dri/swrast_dri.so:不存在 ❌

  • 所以运行时 Mesa 报错:

    libGL error: MESA-LOADER: failed to open swrast
    GLXBadFBConfig
    

✅ 原因总结

  1. 你环境中的 Conda Forge 仓库(或缓存)没有包含 mesa-dri-driversmesa-libgl
  2. 当前环境缺乏任何方式去安装 Mesa 的软件渲染器
  3. 所以 swrast_dri.so 根本没有被部署进去

✅ 最小修复方案(你无 sudo 的前提下)

🛠️ 手动复制系统的 swrast_dri.so 到 Conda 环境

  1. 先在系统中找到它(系统上可能是有的):
find /usr -name swrast_dri.so 2>/dev/null

你很可能会看到类似:

/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
  1. 然后复制到 Conda 环境中:
mkdir -p $CONDA_PREFIX/lib/dri
cp /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so $CONDA_PREFIX/lib/dri/
  1. 确认路径:
ls $CONDA_PREFIX/lib/dri/swrast_dri.so
  1. 重新运行你的脚本前,记得设置环境变量:
export LIBGL_ALWAYS_SOFTWARE=1
export LIBGL_DRIVERS_PATH=$CONDA_PREFIX/lib/dri
export LD_LIBRARY_PATH=$CONDA_PREFIX/lib:$LD_LIBRARY_PATH

✅ 如果找不到系统的 swrast_dri.so

如果 find 没有找到这个文件,那说明系统没装 Mesa 软件渲染(这是非常少见的情况)。

这时你可以让我提供:

  • 🛠️ 一个 .deb 提取包从 Mesa 官网拿到 swrast_dri.so 文件
  • 📦 或者我给你写个 wget 脚本直接下载该 .so 放进你的 Conda 环境

📌 总结:你当前崩溃的根本原因

问题 状态
Open3D 报错 GLXBadFBConfig ❌ 是结果
Mesa 想加载 swrast 软件渲染驱动 ✅ 正确行为
Conda 环境缺少 swrast_dri.so ❌ 根本原因
无法用 mamba 安装 mesa-libgl ❌ 环境不支持或包丢失
手动从系统复制 .so 文件是最直接办法 ✅ 推荐方案

posted @ 2025-05-03 04:38  asandstar  阅读(1174)  评论(0)    收藏  举报