libEGL.so.1 不是符号连接

本文介绍了解决在Ubuntu 16.04.2中使用NVIDIA驱动375.39进行caffe runtest编译时遇到的libEGL.so.1错误的方法。该错误是因为系统试图加载的libEGL.so.1不是一个符号链接。解决方案包括对文件进行重命名并创建正确的符号链接。

ubuntu16.04.2

nvidia 375.39

问题描述:

在编译caffe runtest时候,出现的问题

/sbin/ldconfig.real: /usr/lib/nvidia-375/libEGL.so.1 不是符号连接
/sbin/ldconfig.real: /usr/lib32/nvidia-375/libEGL.so.1 不是符号连接

原因:

系统找的是一个符号连接,而不是一个文件。这应该是个bug....

解决方法:

1.对这两个文件更名

2.重新建立符号连接


sudo mv /usr/lib/

nvidia-375/libEGL.so.1 /usr/lib/nvidia-375/libEGL.so.1.org
sudo mv /usr/lib32/nvidia-375/libEGL.so.1 /usr/lib32/nvidia-375/libEGL.so.1.org
sudo ln -s /usr/lib/nvidia-375/libEGL.so.375.39 /usr/lib/nvidia-375/libEGL.so.1
sudo ln -s /usr/lib32/nvidia-375/libEGL.so.375.39 /usr/lib32/nvidia-375/libEGL.so.1

从 `ldconfig -p | grep EGL` 的输出来看,你的系统同时存在 **NVIDIA 的 EGL 实现**(`libEGL_nvidia.so.0`)和 **Mesa 的 EGL 实现**(`libEGL_mesa.so.0`),并且 `libEGL.so.1` 和 `libEGL.so` 是符号链接,可能指向其中一个实现。这种多 EGL 实现共存的情况可能会导致冲突,尤其是当 ORB-SLAM3 或 Pangolin 加载了错误的库时。 --- ### **可能的问题原因** 1. **EGL 库冲突** - 系统可能优先加载了 Mesa 的 EGL(`libEGL_mesa.so.0`),而 ORB-SLAM3 需要 NVIDIA 的 EGL(`libEGL_nvidia.so.0`)。 - 可以通过 `LD_DEBUG=libs` 调试库加载路径: ```bash LD_DEBUG=libs ldd /path/to/orb_slam3_executable | grep EGL ``` 2. **符号链接指向错误** - `libEGL.so.1` 或 `libEGL.so` 可能链接到了 Mesa 的库,而非 NVIDIA 的库。 - 检查符号链接: ```bash ls -l /lib/x86_64-linux-gnu/libEGL* ``` 3. **NVIDIA 驱动未正确配置** - 即使驱动模块已加载(`lsmod | grep nvidia`),OpenGL/EGL 可能仍在使用 Mesa。 - 运行 `glxinfo | grep "OpenGL renderer"` 确认当前使用的渲染器: ```bash sudo apt-get install mesa-utils glxinfo | grep "OpenGL renderer" ``` 如果输出是 `llvmpipe` 或 `Mesa`,说明未使用 NVIDIA 显卡。 --- ### **解决方案** #### **1. 强制使用 NVIDIA 的 EGL** - **方法 1:设置 `LD_LIBRARY_PATH`** 在运行 ORB-SLAM3 前,指定 NVIDIA 的库路径: ```bash export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/nvidia:$LD_LIBRARY_PATH ./rgbd_tum [参数...] ``` (`/usr/lib/x86_64-linux-gnu/nvidia` 是 NVIDIA 库的常见路径,具体路径可通过 `find / -name "libEGL_nvidia.so.0" 2>/dev/null` 确认。) - **方法 2:更新符号链接** 手动将 `libEGL.so.1` 指向 NVIDIA 的库: ```bash sudo mv /lib/x86_64-linux-gnu/libEGL.so.1 /lib/x86_64-linux-gnu/libEGL.so.1.bak sudo ln -s /lib/x86_64-linux-gnu/libEGL_nvidia.so.0 /lib/x86_64-linux-gnu/libEGL.so.1 ``` **注意**:此操作可能影响其他程序,建议仅在测试时使用。 #### **2. 禁用 Mesa 的 EGL** - 临时重命名 Mesa 的库文件(测试用): ```bash sudo mv /lib/x86_64-linux-gnu/libEGL_mesa.so.0 /lib/x86_64-linux-gnu/libEGL_mesa.so.0.bak ``` 运行 ORB-SLAM3 后再恢复: ```bash sudo mv /lib/x86_64-linux-gnu/libEGL_mesa.so.0.bak /lib/x86_64-linux-gnu/libEGL_mesa.so.0 ``` #### **3. 完全禁用可视化** 如果不需要实时显示,直接禁用 ORB-SLAM3 的查看器: - 修改 `TUM3.yaml`,添加或修改: ```yaml Viewer.enabled: false ``` - 或通过命令行参数禁用(如果支持): ```bash ./rgbd_tum [其他参数] --no-viewer ``` #### **4. 使用虚拟显示(无显示器环境)** ```bash sudo apt-get install xvfb Xvfb :99 -screen 0 1024x768x24 & export DISPLAY=:99 ./rgbd_tum [参数...] ``` #### **5. 检查 NVIDIA OpenGL 配置** - 确保使用 NVIDIA 的 OpenGL: ```bash sudo apt-get install nvidia-prime prime-select nvidia # 强制使用 NVIDIA 驱动 ``` 重启后验证: ```bash glxinfo | grep "OpenGL renderer" ``` 应输出类似 `NVIDIA GeForce RTX 3080/PCIe/SSE2`。 --- ### **调试命令总结** 1. 检查当前加载的 EGL 库: ```bash LD_DEBUG=libs ./rgbd_tum [参数...] 2>&1 | grep EGL ``` 2. 确认 OpenGL 渲染器: ```bash glxinfo | grep "OpenGL renderer" ``` 3. 检查 NVIDIA 驱动状态: ```bash nvidia-smi ``` --- ### **最终建议** 1. **优先尝试禁用可视化**(修改 `TUM3.yaml`)。 2. **强制使用 NVIDIA 的 EGL**(通过 `LD_LIBRARY_PATH` 或符号链接)。 3. 如果问题仍在,可能是 Pangolin 或 ORB-SLAM3 的兼容性问题,建议: - 更新到最新版本的 ORB-SLAM3 和 Pangolin。 - 在 GitHub 提交 Issue 并提供完整日志。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值