简介

  • ldd命令

linux ldd命令 详解

ldd 是 Linux 系统中的一个命令,用于显示可执行文件或共享库的动态链接依赖关系。它会列出程序运行时所需的共享库,并显示它们的完整路径。以下是关于 ldd 命令的详细解释:

语法:

1
ldd [选项] 可执行文件

常用选项:

  • -v, –verbose: 显示详细的信息,包括库的版本号和调试信息。

  • -u, –unused: 仅显示未使用的直接依赖项。

  • -d, –data-relocs: 显示数据的重定位信息。

  • -r, –function-relocs: 显示函数的重定位信息。

  • -s, –not-symbolic: 不解析符号链接,直接显示链接库的真实路径。

  • -f, –list-file: 将输出写入到指定的文件而不是标准输出。

示例:

  1. 显示可执行文件的动态链接依赖关系:
    1
    
    ldd /path/to/executable
    

    这将列出可执行文件所需的共享库以及它们的完整路径。

  2. 显示未使用的直接依赖项:
    1
    
    ldd -u /path/to/executable
    

    使用 -u 选项,仅显示未被程序使用的直接依赖项。

  3. 显示详细信息和版本号:
    1
    
    ldd -v /path/to/executable
    

    使用 -v 选项,可以显示详细的信息,包括库的版本号和调试信息。

  4. 显示数据的重定位信息:
    1
    
    ldd -d /path/to/executable
    

    使用 -d 选项,可以显示数据的重定位信息。

  5. 显示函数的重定位信息:
    1
    
    ldd -r /path/to/executable
    

    使用 -r 选项,可以显示函数的重定位信息。

  6. 不解析符号链接,直接显示链接库的真实路径:
    1
    
    ldd -s /path/to/executable
    

    使用 -s 选项,将不解析符号链接,直接显示链接库的真实路径。

  7. 将输出写入到文件:
    1
    
    ldd -f /path/to/executable > dependencies.txt
    

    使用 -f 选项,可以将输出写入到指定的文件而不是标准输出。

示例解释:

  • 动态链接依赖关系: ldd 命令会列出可执行文件所依赖的共享库,并显示它们的路径,以便操作系统在程序运行时能够正确加载这些库。

  • 未使用的依赖项: 使用 -u 选项,可以找出程序依赖的库中哪些没有被程序使用。

  • 详细信息和版本号: 使用 -v 选项,可以获取更详细的信息,包括库的版本号和调试信息,有助于排查问题。

  • 重定位信息: 使用 -d-r 选项,可以查看关于数据和函数的重定位信息,对于调试和分析程序行为很有帮助。

  • 不解析符号链接: 使用 -s 选项,可以显示链接库的真实路径,而不是解析符号链接。

  • 输出写入文件: 使用 -f 选项,可以将 ldd 命令的输出写入指定的文件,以便后续分析。

linux ldd命令 常用技巧

ldd 命令在 Linux 中用于查看可执行文件或共享库的动态链接依赖关系。以下是一些 ldd 命令的常用技巧:

  1. 查看可执行文件的动态链接库:
    1
    
    ldd /path/to/executable
    

    这会列出可执行文件所依赖的共享库以及它们的路径。

  2. 只显示缺失的动态链接库:
    1
    
    ldd -u /path/to/executable
    

    使用 -u 选项,可以仅显示未被程序使用的直接依赖项,即缺失的库。

  3. 显示详细信息:
    1
    
    ldd -v /path/to/executable
    

    使用 -v 选项,可以显示更详细的信息,包括库的版本号和调试信息。

  4. 查看共享库的依赖关系:
    1
    
    ldd /path/to/shared/library.so
    

    ldd 不仅可以用于可执行文件,也可以用于查看共享库的依赖关系。

  5. 将输出写入文件:
    1
    
    ldd /path/to/executable > dependencies.txt
    

    ldd 的输出写入文件,以便后续分析。

  6. 显示所有符号链接的真实路径:
    1
    
    ldd -s /path/to/executable
    

    使用 -s 选项,可以显示链接库的真实路径,而不是解析符号链接。

  7. 显示函数的重定位信息:
    1
    
    ldd -r /path/to/executable
    

    使用 -r 选项,可以显示函数的重定位信息,对于调试和分析程序行为很有帮助。

  8. 显示数据的重定位信息:
    1
    
    ldd -d /path/to/executable
    

    使用 -d 选项,可以显示数据的重定位信息。

  9. 递归查看所有依赖项:
    1
    
    find /path/to/executable -exec ldd {} \;
    

    使用 find 命令和 -exec 选项,递归查看所有依赖项。

这些技巧能够帮助你更深入地了解程序的依赖关系,有助于调试和解决运行时的问题。

ldd(list dynamic dependencies)

  • 简介:
    • ldd命令用于打印程序或者库文件所依赖的共享库列表。
  • 语法
    • ldd [参数] [文件]
  • 参数
    • -v 详细信息模式,打印所有相关信息
    • -u 打印未使用的直接依赖
    • -d 执行重定位和报告任何丢失的对象
    • -r 执行数据对象和函数的重定位,并且报告任何丢失的对象和函数
    • –help 显示帮助信息
  • 示例:
    1
    
    ldd /path/to/executable
    
  • 注:
    • 当你在终端中运行 ldd 命令并指定一个可执行文件的路径时,它会列出该可执行文件所依赖的共享库。对于每个共享库,它会显示库的路径和版本号。这些共享库是程序在运行时需要的动态链接库,它们提供了程序所需的函数和符号
    • ldd 命令对于诊断程序依赖性问题非常有用。通过查看程序的依赖库列表,你可以确定程序是否缺少某些依赖库或使用了不兼容的库版本
    • 需要注意的是,ldd 命令只能查看程序或共享库的直接依赖库,无法递归地列出所有依赖关系。如果你需要查看所有依赖库,可以使用工具如 readelf 或 objdump 结合脚本来实现