WSL2下安装MESA / OSMESA驱动

找不到的命令可以在这里找https://command-not-found.com/

写在最前面

如果你和我一样是在用pyrender的时候遇到了以下问题,并且在试了以下方法代码仍然报莫名其妙错误的时候,请通过pippyrender pyopengl 都升到最新版,可以无视pyrenderpyopengl 的版本要求警告,另外wsl 的cuda升到最新版本,最后我一直提示Segmentation Fault的 问题居然是通过升级cuda驱动解决的…升级的过程可以参考官方文档

配置Xorg Libraries

参考https://www.linuxfromscratch.org/blfs/view/svn/x/x7lib.html,复制里面的命令一步一步来就好

可能遇到的问题:

configure: error: /X11 doesn’t exist or isn’t a directory
解决方法:https://www.linuxquestions.org/questions/linux-software-2/floating-point-exception-when-compiling-libx11-1-0-a-4175653823/

sudo mkdir /X11

checking keysym definitions… Package xproto was not found in the pkg-config search path.
Perhaps you should add the directory containing `xproto.pc’
to the PKG_CONFIG_PATH environment variable
No package ‘xproto’ found
configure: error: Cannot find keysymdef.h

sudo apt-get install x11proto-core-dev

configure: error: Package requirements (xproto >= 7.0.25 xextproto xtrans xcb >= 1.11.1 kbproto inputproto) were not met:

No package ‘xcb’ found
解决方法:https://unix.stackexchange.com/questions/338519/how-to-install-libxcb

sudo apt install libxcb-util-dev

/bin/bash: line 1: xgettext: command not found

sudo apt-get install gettext

configure: error: You must have freetype installed; see http://www.freetype.org/

sudo apt install freetype2-demos freetype2-doc libfreetype6 libfreetype6-dev

No package ‘xorg-macros’ found

sudo apt-get install xutils-dev

checking for fontconfig >= 2.5.92… no
configure: error: Package requirements (fontconfig >= 2.5.92) were not met:

No package ‘fontconfig’ found

sudo apt install libfontconfig1-dev

配置Libdrm

按照https://www.linuxfromscratch.org/blfs/view/svn/x/libdrm.html一步步来

可能遇到报错../meson.build:21:0: ERROR: prefix value '' must be an absolute path ,在~/.bashrc 或者~/.zshrc ,取决于你用的shell里加一行export XORG_PREFIX=/usr

配置MESA

参考https://gitlab.freedesktop.org/mesa/mesa/-/issues/7584

sudo apt-get build-dep mesa
git clone https://gitlab.freedesktop.org/mesa/mesa.git
cd mesa
mkdir build
meson setup build -Dvulkan-drivers=microsoft-experimental && cd build && sudo ninja install
# 实际使用的时候因为我需要比较多的drivers,所以我使用的是下面这一行
meson setup build -Dvulkan-drivers=microsoft-experimental -Dgallium-drivers="auto, kmsro, radeonsi, r300, r600, nouveau, freedreno, swrast, v3d, vc4, etnaviv, tegra, i915, svga, virgl, panfrost, iris, lima, zink, d3d12, asahi, crocus" && cd build && sudo ninja install

可能遇到的问题:

meson.build:2051:4: ERROR: Program ‘byacc’ not found or not executable

sudo apt install byacc

meson.build:2062:2: ERROR: Program ‘flex’ not found or not executable

sudo apt-get install flex

meson.build:2118:2: ERROR: Dependency “wayland-scanner” not found, tried pkgconfig and cmake

sudo apt-get install libwayland-dev

meson.build:2125:2: ERROR: Dependency “wayland-protocols” not found, tried pkgconfig and cmake

sudo apt-get install wayland-protocols

meson.build:2129:4: ERROR: Dependency “wayland-egl-backend” not found, tried pkgconfig and cmake

sudo apt-get install libwayland-egl-backend-dev

meson.build:2179:4: ERROR: Dependency “xcb-glx” not found, tried pkgconfig and cmake

sudo apt install libxcb-glx0-dev

meson.build:2180:4: ERROR: Dependency “xcb-shm” not found, tried pkgconfig and cmake

sudo apt-get install libxcb-shm0-dev

meson.build:2192:4: ERROR: Dependency “xcb-dri2” not found, tried pkgconfig and cmake

sudo apt-get install libxcb-dri2-0-dev

meson.build:2195:6: ERROR: Dependency “xcb-dri3” not found, tried pkgconfig and cmake

sudo apt-get install libxcb-dri3-dev

后面真的受不了了,直接照着strings ./meson.build | grep xcb- 的结果把依赖全安装上了,结果发现只剩一个了…

sudo apt-get install libxcb-present-dev

Linking target src/gallium/targets/dri/libgallium_dri.so

/usr/bin/ld: src/gallium/drivers/radeonsi/libradeonsi.a.p/si_debug.c.o: in function si_print_annotated_shader': /home/user/mesa/src/mesa/build/../src/gallium/drivers/radeonsi/si_debug.c:951: undefined reference to ac_rtld_close’
https://gitlab.freedesktop.org/mesa/mesa/-/issues/7456

sudo apt install libelf-dev

配置OSMESA

参考https://pyrender.readthedocs.io/en/latest/install/index.html,不过这个版本里面的OSMESA已经很老了,最新版的OSMESA都是通过meson+ninja 进行编译的,如果想要和pyrender 搭配使用的话最好是同样指定一个prefix,以免环境乱掉,实际上OSMESA的官网也给出了示例:

meson builddir -Dosmesa=true -Dgallium-drivers=swrast -Dvulkan-drivers=[] -Dprefix=$PWD/builddir/install
ninja -C builddir install

由于我用的zsh不支持方括号,实际在wsl中编译的时候应该改一下,假如想放到prefix文件夹/usr/local/osmesa 下,在git clone了mesa的源码后创建一个buildosmesa文件夹:

cd mesa-22.3.2
mkdir buildosmesa
sudo mkdir -p /usr/local/osmesa
meson buildosmesa -Dosmesa=true -Dgallium-drivers="auto, kmsro, radeonsi, r300, r600, nouveau, freedreno, swrast, v3d, vc4, etnaviv, tegra, i915, svga, virgl, panfrost, iris, lima, zink, d3d12, asahi, crocus" -Dvulkan-drivers=microsoft-experimental -Dprefix=/usr/local/osmesa
sudo ninja -C buildosmesa install

最后记得更新一下环境变量

MESA_HOME=/path/to/your/mesa/installation # 我的是/usr/local/osmesa
export LIBRARY_PATH=$LIBRARY_PATH:$MESA_HOME/lib
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$MESA_HOME/lib
export C_INCLUDE_PATH=$C_INCLUDE_PATH:$MESA_HOME/include/
export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:$MESA_HOME/include/
<think>好的,我现在需要解决用户在使用Open3D的draw_geometries函数时遇到的Segmentation fault (core dumped)问题。根据用户提供的错误信息,之前遇到的是X11 DISPLAY环境变量缺失的问题,但现在可能出现了不同的情况。首先,我应该回忆一下常见的导致段错误的原因。 首先,Segmentation fault通常是由于程序访问了未分配的内存或者权限问题。在Open3D的上下文中,这可能与图形驱动、显示设置或库的安装有关。用户之前遇到的是GLFW的X11 DISPLAY问题,可能他们现在在同样的环境中,但问题表现不同,或者环境发生了变化。 接下来,我应该考虑可能的解决方案。根据经验,这类问题常见的原因包括: 1. **显示后端配置问题**:比如在无头服务器或远程SSH连接中,缺少正确的显示设置。这时可能需要使用虚拟显示或设置环境变量。 2. **图形驱动不兼容或缺失**:尤其是对于需要硬件加速的3D渲染,驱动是否正确安装非常重要。 3. **Open3D版本或依赖问题**:可能安装的Open3D版本存在bug,或者依赖库如GLFW、VTK等未正确安装或版本不匹配。 4. **多线程或资源竞争**:某些情况下,多线程访问可能导致问题,尤其是在图形渲染时。 然后,我需要将这些问题转化为具体的解决步骤。比如,用户可能需要先检查显示设置,尝试使用虚拟显示如Xvfb。如果问题依旧,可能需要更新驱动或降级Open3D版本。此外,安装必要的依赖库如libgl1-mesa-glx也可能有帮助。 另外,用户可能没有正确安装OpenGL相关库,或者在WSL等环境中运行,这些环境对图形支持有限。因此,建议用户确认运行环境,并安装必要的依赖。 还需要考虑是否在Docker容器中运行,这时可能需要添加一些参数来允许图形渲染。此外,检查Open3D的官方文档和GitHub issues可能会有类似问题的解决方案,比如降级到特定版本。 最后,用户可能需要启用软件渲染,比如使用LIBGL_ALWAYS_SOFTWARE=1,或者检查系统日志以获取更详细的错误信息。 总结下来,解决方案的步骤应该是分层次的,从显示配置开始,逐步排除驱动、依赖、版本等问题,并提供替代的渲染方法如关闭可视化或保存为图像。同时,引用相关文档和社区资源帮助用户进一步排查。</think>关于`open3d.visualization.draw_geometries`函数导致的`Segmentation fault (core dumped)`问题,以下是系统性解决方案: --- ### 1. **检查显示后端兼容性** - **问题原因**:在无图形界面环境(如服务器、Docker容器或远程SSH)中,Open3D依赖的GLFW/X11可能无法直接调用显示服务。 - **解决方案**: - **使用虚拟显示框架**:安装`Xvfb`并运行代码前启动虚拟显示: ```bash sudo apt-get install xvfb Xvfb :99 -screen 0 1024x768x24 & export DISPLAY=:99 ``` - **添加环境变量**(针对WSLLinux无头环境): ```bash export LIBGL_ALWAYS_SOFTWARE=1 ``` --- ### 2. **验证OpenGL驱动安装** - **问题原因**:缺少OpenGL驱动驱动版本过旧。 - **解决方案**: - 安装Mesa驱动: ```bash sudo apt-get install libgl1-mesa-glx libgl1-mesa-dev ``` - 更新NVIDIA驱动(如有GPU): ```bash sudo apt-get install nvidia-driver-470 # 版本根据硬件调整 ``` --- ### 3. **Open3D版本降级/升级** - **问题原因**:某些版本(如0.15.1)存在已知的GLFW兼容性问题[^1]。 - **解决方案**: ```bash # 尝试降级到稳定版本 pip install open3d==0.14.1 # 或升级到最新版本 pip install open3d --upgrade ``` --- ### 4. **强制使用软件渲染** - **问题原因**:硬件加速渲染失败时,强制使用CPU渲染: ```python import os os.environ["LIBGL_ALWAYS_SOFTWARE"] = "1" os.environ["PYOPENGL_PLATFORM"] = "osmesa" ``` --- ### 5. **替代可视化方案** 如果仍无法解决,可绕过实时渲染: - **保存为图像文件**: ```python open3d.io.write_point_cloud("output.ply", pcd) ``` - **使用Web可视化**: ```python open3d.visualization.draw_geometries_with_webgl([pcd]) ``` --- ### 6. **调试段错误** - **捕获堆栈跟踪**: ```bash gdb python3 core # 分析core dump文件 ulimit -c unlimited # 启用core dump生成 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值