【解决问题】【 error: '/usr/lib/x86_64-linux-gnu/libGL.so'】
0 前言
- 这个问题是我在slam14讲的第十二讲的RGBD稠密建图中使用pcl的时候报错的
- 系统配置:
ubuntu18.06
1 问题描述
- 在编译工程的时候报错
error: '/usr/lib/x86_64-linux-gnu/libGL.so'
,最终确定是由于系统中缺少libGL.so
- 这是由于动态库链接中断造成的,我们在相应的文件目录下看看该文件的状态
cd /usr/lib/x86_64-linux-gnu/
- 有好些解决方法是基于该目录下存在
libGL.so
这个文件的,如参考文章3 - 而我遇到的情况是该文件夹下没有
libGL.so
,只有libGL.so.1
和libGL.so.1.0.0
这两个文件,类似于参考文章2
2 解决方案
- 首先确定自己安装了
libGL
库
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev
虽然就算安装了可能也并不能解决问题
- 然后在整个电脑中查找
libGL.so
,如果查找到了就好办了,把这个libGL.so
复制到/usr/lib/x86_64-linux-gnu/
路径下,命令为
sudo cp xxx/libGL.so /usr/lib/x86_64-linux-gnu/libGL.so
但是,这里我整个电脑都没有找到,所以我把libGL.so.1
复制一份为了libGL.so
sudo cp /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so
- 然后知道这是由于动态库链接中断造成的,所以我们要进行链接,首先要确定正确的
libGL.so
建立的是什么链接,查看一个库文件的链接方式为:(这是摘自从另一台电脑中获得的正确链接方式)
wrx@wrx:/usr/lib/x86_64-linux-gnu$ ls -l libGL.so
lrwxrwxrwx 1 root root 14 5月 10 20:17 libGL.so -> libGL.so.1.0.0
- 现在有了新的
libGL.so
,也知道了正确的链接方式,下面进行链接
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
若提示无法创建符号链接,文件已经存在,就把已经存在的那个文件用sudo rm删掉,我就是备份后直接删掉了
直接删掉不太放心,先sudo cp备份一下
这是因为涉及到这些符号链接文件需要用绝对路径,也就是说,即使你在该目录下,也不要用./libGL.so这种方式,而是要老老实实带上/urs/lib/x86…
手动链接
- 下面的就是一些其他的注意事项
- 完了之后,一方面可以右键文件属性查看是否链接成功,一方面可以
ls -n /usr/lib/x86_64-linux-gnu/libGL.so
查看其链接状态,一方面可以ls该目录下的所有文件看是否有红名存在。 - P了个S,最好不要用自动链接,
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so
省去后面的参数就是自动链接,因为这里自动链接到另外一个so文件,且链接完了之后还是红名+链接断开状态,这里是参考的别人的 - 然后再编译就可以了,但是这里也有疑惑,由于我是直接删除了
libGL.so.1.0.0
,然后建立的链接,但是使用ls -n
检查发现三者之间的没有互相连接,但是三者之间存在链接 - 然后我使用
ldd pointcloud_mapping
,查看可执行文件的链接库链接情况,发现:
libGL.so.1 => /usr/lib/x86_64-linux-gnu/libGL.so.1 (0x00007f127af3d000)
最后链接的还是libGL.so.1
,emmm,迷惑,但是问题至少是这个问题解决了
3 额外收获
3.1 库的链接建立及查看
3.1.1 库的链接建立
sudo ln -s /usr/lib/x86_64-linux-gnu/libGL.so /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
3.1.2 库的链接查看
查看其链接状态
ls -n /usr/lib/x86_64-linux-gnu/libGL.so
3.2 工具apt-file,查看可以用来解决linux 下任何 lib 文件缺失的情况
3.2.1 工具apt-file安装
sudo apt-get install apt-file
sudo apt-file update
这样,就装好了该工具
3.2.2 使用示例
如果要搜索什么lib,如本文的libGL.so,则输入:
sudo apt-file search libGL.so
返回:
libgl1: /usr/lib/x86_64-linux-gnu/libGL.so.1
libgl1: /usr/lib/x86_64-linux-gnu/libGL.so.1.0.0
libglvnd-dev: /usr/lib/x86_64-linux-gnu/libGL.so
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.1
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.340.106
nvidia-340: /usr/lib/i386-linux-gnu/libGL.so.340.108
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.1
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.340.106
nvidia-340: /usr/lib/x86_64-linux-gnu/libGL.so.340.108
primus-libs: /usr/lib/x86_64-linux-gnu/primus/libGL.so.1
virtualbox-guest-x11: /usr/lib/virtualbox/additions/libGL.so
virtualbox-guest-x11: /usr/lib/virtualbox/additions/libGL.so.1
virtualbox-guest-x11-hwe: /usr/lib/virtualbox/additions/libGL.so
virtualbox-guest-x11-hwe: /usr/lib/virtualbox/additions/libGL.so.1
可以看到你可能是什么包缺失,然后装上就好,比如这里我当时怀疑是libglvnd-dev没装,装了以后发现还是有上面的问题,其实应该先查该so文件是否存在才对,不要像无头苍蝇。