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
✅ 原因总结
- 你环境中的 Conda Forge 仓库(或缓存)没有包含
mesa-dri-drivers或mesa-libgl - 当前环境缺乏任何方式去安装 Mesa 的软件渲染器
- 所以
swrast_dri.so根本没有被部署进去
✅ 最小修复方案(你无 sudo 的前提下)
🛠️ 手动复制系统的 swrast_dri.so 到 Conda 环境
- 先在系统中找到它(系统上可能是有的):
find /usr -name swrast_dri.so 2>/dev/null
你很可能会看到类似:
/usr/lib/x86_64-linux-gnu/dri/swrast_dri.so
- 然后复制到 Conda 环境中:
mkdir -p $CONDA_PREFIX/lib/dri
cp /usr/lib/x86_64-linux-gnu/dri/swrast_dri.so $CONDA_PREFIX/lib/dri/
- 确认路径:
ls $CONDA_PREFIX/lib/dri/swrast_dri.so
- 重新运行你的脚本前,记得设置环境变量:
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 文件是最直接办法 |
✅ 推荐方案 |

浙公网安备 33010602011771号