ldd 是否报告库的所有依赖项?

Does ldd reports all dependencies of a library?

假设我们有一个名为 utils.so 的共享库。它可能包含未定义的符号。还假设 ldd 报告该库依赖于其他一些库:

$ ldd utils.so
  library1.so
  library2.so
  ...
  libraryN.so

(但是 utils.so 是否可能不仅依赖于一些共享库,还依赖于一些静态库?)

utils.so 的所有未定义符号是否都由库 library1.so、library2.so、...、libraryN.so 解析?

关于静态库的相同问题 - 静态库的所有未定义符号是否都由 ldd 报告的库解析?

Is it true that all undefined symbols of utils.so are resolved by libraries library1.so, library2.so, ... , libraryN.so

不一定。您可以创建一个没有依赖关系但带有未定义符号的共享库。如果符号是由可执行文件(或已经恰好加载的共享库)提供的,那么这样的库将工作正常,否则无法加载。不建议创建此类库,除非有针对可执行文件解析符号的特定需要。

And the same question about static libraries

ldd 与静态库无关,它无法读取它们或报告有关它们的任何信息。静态库没有依赖关系。它们或多或少是对象的愚蠢档案。