
在編譯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:
??如何將動態函數庫加載到高速緩存中呢?
-- 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,若被指向路徑文件被重新創建,死鏈接可恢復為正常的軟鏈接)。

