3

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

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

4

1 回答 1

1

请参阅 Michael 在https://unix.stackexchange.com/questions/475/how-do-so-shared-object-numbers-work上的回答

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

于 2015-02-10T20:33:36.253 回答