为什么 Ubuntu 20.04 在 /lib 和 /usr/lib 之间复制动态目标文件

为什么 Ubuntu 20.04 在 /lib 和 /usr/lib 之间复制动态目标文件

为什么 ubuntu 会重复目标文件以及如何找到包所拥有的正确文件,而不依赖黑客来改变 LD_LIBRARY_PATH?

来自 Ubuntu 20.04 的一个简单示例:

> docker run -it --rm ubuntu:20.04
...
# ldd /usr/bin/apt
    ...
    libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f7eded19000)
    ...
# dpkg-query --search /lib/x86_64-linux-gnu/libstdc++.so.6
dpkg-query: no path found matching pattern /lib/x86_64-linux-gnu/libstdc++.so.6
# dpkg-query --search /usr/lib/x86_64-linux-gnu/libstdc++.so.6
libstdc++6:amd64: /usr/lib/x86_64-linux-gnu/libstdc++.so.6

我正在查看链接到 apt 的目标文件,其中 libstdc++.so.6 就是其中之一。libstdc++6 包拥有/usr/lib/x86_64-linux-gnu/libstdc++.so.6。但是:

  1. ldd查找目标文件的顺序/lib在之前指定/usr/lib
  2. 目标文件存在/lib/usr/lib
  3. 包所拥有的文件在顺序中位于较后位置

这最终导致加载的目标文件不是提供该文件的包所拥有的文件。

我已验证 debian 没有重复的目标文件(或至少没有 libstdc++6)。为什么它们存在?有没有办法忽略它们?

答案1

首先出于兼容性原因,有一个结构,但现在 lib 只是符号链接到 /usr/lib

也可以看看

相关内容