“未使用的直接依赖项”是什么意思?

seb*_*elk 4 shared-library ld

使用该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)

什么是“未使用的直接依赖项”?为什么它们没有被使用?为什么它们是依赖关系

Ste*_*itt 6

它们是依赖项,因为二进制文件将它们列为依赖项,如动态部分中的 \xe2\x80\x9cNEEDED\xe2\x80\x9d 条目:

\n\n
readelf -d /usr/bin/gcc\n
Run Code Online (Sandbox Code Playgroud)\n\n

将向您显示图书馆的gcc请求。

\n\n

它们未被使用,因为gcc\xe2\x80\x99t 实际上不需要相关库导出的任何符号。在ld-linux-x86-64.so.2\xe2\x80\x99s的情况下,\xe2\x80\x99s正常,因为\xe2\x80\x99s是解释器。在libm\xe2\x80\x99s 情况下,这通常是由无条件 导致的-lm,没有相应的链接器选项来删除未使用的库

\n\n

在许多情况下,这是由于构建工具的粒度有限造成的;特别是,链接例如GNOME 库往往会产生很长的库列表,这些库列表并不总是需要作为直接依赖项(但最终会出现在库依赖项树中)。通常最好尝试避免使用未使用的依赖项,以简化依赖项处理(通过运行时链接器和包管理工具)。\xe2\x80\x99s 可以安全地忽略,libm因为 \xe2\x80\x99s 与libc

\n