【问题标题】:understanding ldd output - symbolic links理解 ldd 输出 - 符号链接
【发布时间】:2015-02-10 19:29:16
【问题描述】:

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

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

【问题讨论】:

    标签: linux shared-libraries ldd


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-20
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2011-06-14
      • 2017-06-14
      相关资源
      最近更新 更多