通常共享库有两个符号链接:
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 :(得分:1)
请参阅迈克尔在https://unix.stackexchange.com/questions/475/how-do-so-shared-object-numbers-work
上的回答二进制文件本身知道它们所依赖的共享库的版本,并具体请求它。 符号链接的原因是链接器。当你想直接链接libpthread.so时,你给gcc标志-lpthread,它会自动添加lib前缀和.so后缀。你不能告诉它添加.so.0后缀,所以符号链接指向最新版本的lib来促进