使用该ldd
命令时,有一个选项 ,-u
可以
打印未使用的直接依赖项
如在线帮助中所述。
例如:
ldd -u /bin/gcc
Unused direct dependencies:
/lib64/libm.so.6
/lib64/ld-linux-x86-64.so.2
Run Code Online (Sandbox Code Playgroud)
什么是“未使用的直接依赖项”?为什么它们没有被使用?为什么它们是依赖关系?
它们是依赖项,因为二进制文件将它们列为依赖项,如动态部分中的 \xe2\x80\x9cNEEDED\xe2\x80\x9d 条目:
\n\nreadelf -d /usr/bin/gcc\n
Run Code Online (Sandbox Code Playgroud)\n\n将向您显示图书馆的gcc
请求。
它们未被使用,因为gcc
\xe2\x80\x99t 实际上不需要相关库导出的任何符号。在ld-linux-x86-64.so.2
\xe2\x80\x99s的情况下,\xe2\x80\x99s正常,因为\xe2\x80\x99s是解释器。在libm
\xe2\x80\x99s 情况下,这通常是由无条件 导致的-lm
,没有相应的链接器选项来删除未使用的库。
在许多情况下,这是由于构建工具的粒度有限造成的;特别是,链接例如GNOME 库往往会产生很长的库列表,这些库列表并不总是需要作为直接依赖项(但最终会出现在库依赖项树中)。通常最好尝试避免使用未使用的依赖项,以简化依赖项处理(通过运行时链接器和包管理工具)。\xe2\x80\x99s 可以安全地忽略,libm
因为 \xe2\x80\x99s 与libc
。
归档时间: |
|
查看次数: |
3641 次 |
最近记录: |