让我们假设有一个共享库utils.so。它可能包含未定义的符号。还假设ldd报告该库依赖于其他一些库:
$ ldd utils.so
library1.so
library2.so
...
libraryN.so
(顺便问一句,utils.so不仅取决于某些共享库,而且还取决于某些静态库吗?)
是不是所有utils.so的未定义符号都由库library1.so,library2.so,...,libraryN.so解析了?
关于静态库的相同问题-静态库的所有未定义符号是否都由ldd报告的库解决?
答案 0 :(得分:2)
确实是utils.so的所有未定义符号都由库library1.so,library2.so,...,libraryN.so解析了
不一定。您可以创建一个没有依赖项但带有未定义符号的共享库。如果这些符号是由可执行文件(或由恰好已加载的共享库)提供的,则这样的库将工作正常,否则将无法加载。除非特别需要针对可执行文件解析符号,否则不建议创建此类库。
关于静态库的同样问题
ldd
与静态库无关,它无法读取静态库或报告任何静态库。静态库没有依赖项。它们或多或少是对象的愚蠢档案。