2015-02-10 38 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以便于使用。