2015-02-10 56 views
2

通常共享庫有兩個符號鏈接:理解LDD輸出 - 符號鏈接

libexample.so -> libexample.so.1 
libexample.so.1 -> libexample.so.1.1 

我鏈接到我的程序的共享庫也有兩個符號鏈接:

libassimp.so -> libassimp.so.3 
libassimp.so.3 -> libassimp.so.3.1.1 

當我運行ldd myprogram我得到:

libassimp.so.3 => /home/user/libs/assimp-3.1.1/lib/libassimp.so.3 
(0x00007f34ab0bd000)' 

這是什麼意思?爲什麼ldd顯示第二個符號鏈接?當我運行grep assimp /proc/myprogrampid/maps時,我得到指向該庫已加載的libassimp.so.3.1.1的路徑,但我不理解ldd輸出的形式。

回答

0

參考邁克爾對https://unix.stackexchange.com/questions/475/how-do-so-shared-object-numbers-work

二進制回答自己知道,他們依賴於共享庫的版本,並要求其明確。 符號鏈接的原因是鏈接器。當你想直接鏈接到libpthread.so時,你給gcc一個標誌-lpthread,它會自動添加lib前綴和.so後綴。你不能告訴它在.so.0後綴上添加,所以符號鏈接指向最新版本的lib以便於使用。