No rule to make target '/usr/lib/x86_64-linux-gnu/libGL.so
在编译Ogre的时候make install出现了这个问题,这里发现我的libGL.so指向了libGL.so.1.0.0,这是怎么一回事呢?
-
搜索libGL.so文件路径: 比如,本机中路径为:/usr/lib/libGL.so
-
建立symlink: sudo ln -s /usr/lib/libGL.so.1 /usr/lib/x86_64-linux-gnu/libGL.so (之所以链接到libGL.so.1而不是libGL.so可能是为了便于区分)
-
如果出现错误: ln: failed to create symbolic link '/usr/lib/x86_64-linux-gnu/libGL.so' : File exists
则删除已有链接: sudo rm /usr/lib/x86_64-linux-gnu/libGL.so
-
重新执行步骤2建立symlink
??为什么要使用动态链接库?
--《鸟哥的私房菜》中提及:动态函数库在编译的时候,在程序里面只有一个“指向”(Pointer)的位置而已,也就是说,动态函数库的内容并没有被整合到可执行文件中,而是当可执行文件要使用到函数库的时候程序才会读取函数库来使用。由于可执行文件中仅仅具有指向动态函数库所在的指标而已,并不包含函数库的内容,所以它的文件比较小一点。以下摘自APUE:
![](https://i.loli.net/2019/09/13/Q1hEX6dIOHfmMSx.png)
??如何将动态函数库加载到高速缓存中呢?
-- 1.首先,我们必须在/etc/ld.so.conf
文件夹里面写下想要读入高速缓存当中的动态函数库所在的目录,注意是目录而不是文件。
2.接下来利用ldconfig这个可执行文件将/etc/ld.so.conf.d
的数据读入缓存中;
3.同时也将数据记录一份在/etc/ld.so.cache
这个文件当中。
Tips:可以使用ldconfig -p
指令查看函数库内容(ld.so.cache)
?? 硬连接与软连接
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
- 文件有相同的 inode 及 data block;
- 只能对已存在的文件进行创建;
- 不能交叉文件系统进行硬链接的创建;
- 不能对目录进行创建,只可对文件创建;
- 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块(见下图)。因此软链接的创建与使用没有类似硬链接的诸多限制:
- 软链接有自己的文件属性及权限等;
- 可对不存在的文件或目录创建软链接;
- 软链接可交叉文件系统;
- 软链接可对文件或目录创建;
- 创建软链接时,链接计数 i_nlink 不会增加;
- 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。