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
与静态库无关,它无法读取它们或报告有关它们的任何信息。静态库没有依赖关系。它们或多或少是对象的愚蠢档案。
假设我们有一个名为 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
与静态库无关,它无法读取它们或报告有关它们的任何信息。静态库没有依赖关系。它们或多或少是对象的愚蠢档案。