使用该ldd
命令时,有一个选项 ,-u
可以
打印未使用的直接依赖项
如在线帮助中所述。
例如:
ldd -u /bin/gcc
Unused direct dependencies:
/lib64/libm.so.6
/lib64/ld-linux-x86-64.so.2
什么是“未使用的直接依赖项”?为什么他们没用过?为什么他们依赖关系?
答案1
它们是依赖项,因为二进制文件将它们列为依赖项,在其动态部分中作为“NEEDED”条目:
readelf -d /usr/bin/gcc
将向您显示图书馆的gcc
请求。
它们未被使用,因为gcc
实际上不需要相关库导出的任何符号。就ld-linux-x86-64.so.2
s 而言,这很正常,因为那是解释器。在libm
的情况下,这通常是由无条件的-lm
, 没有用于删除未使用的库的相应链接器选项。
在许多情况下,这是由于构建工具的粒度有限造成的;特别是,链接例如GNOME 库往往会产生很长的库列表,这些库并不总是需要作为直接依赖项(但无论如何最终都会出现在库依赖项树中)。通常最好尝试避免使用未使用的依赖项,以简化依赖项处理(通过运行时链接器和包管理工具)。不过,忽略它是安全的,libm
因为无论如何它都是相关的libc
。