Linux 了解ldd输出-符号链接

Linux 了解ldd输出-符号链接,linux,shared-libraries,ldd,Linux,Shared Libraries,Ldd,通常,共享LIB有两个符号链接: 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 我将一个共享库链接到我的程序,该库也有两个符号链接: libexample.so -> libexample.so.1 libexample.so.1 -&

通常,共享LIB有两个符号链接:

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
我将一个共享库链接到我的程序,该库也有两个符号链接:

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输出的形式。

请参阅上Michael的答案

二进制文件本身知道它们所依赖的共享库的哪个版本,并专门请求它。 符号链接的原因是为了链接器。当您想直接链接libpthread.so时,您给gcc一个标志-lpthread,它会自动添加lib前缀和.so后缀。您不能告诉它添加.so.0后缀,因此符号链接指向lib的最新版本,以方便添加