【问题标题】:Programming way to list shared library dependency on linux列出linux上共享库依赖的编程方法
【发布时间】:2011-07-12 07:20:21
【问题描述】:

是否有任何编程方式(系统调用?)列出 Linux 上的共享库依赖关系?而不是使用ldd ...

【问题讨论】:

  • 在真正出现之前只是一个通用的答案:您可以随时检查程序的源代码(在本例中为 ldd)以了解它的作用。

标签: linux linker shared-libraries dependency-management


【解决方案1】:
readelf -Wa lib.so|grep NEEDED

【讨论】:

  • readelf -d lib.so 效率更高,因为它不需要解码 all 信息。此外,这不提供“ldd”提供的完整(传递)依赖项列表;只有直接的。
【解决方案2】:

【讨论】:

    【解决方案3】:

    将 LD_TRACE_LOADED_OBJECTS 环境变量设置为非空字符串并运行您的二进制文件。查看this 手册页。

    LD_TRACE_LOADED_OBJECTS
        (ELF only) If set to non-empty string, causes the program to list its dynamic library dependencies, as if run by ldd(1), instead of running normally. 
    

    【讨论】:

    • 如果我想检查共享库而不是二进制文件的依赖关系怎么办?在这种情况下,我无法运行共享库...谢谢。
    • 您可以通过这种方式在共享库上运行 ld.so:/lib/ld-2.11.2.so --list /lib/libc.so.6
    【解决方案4】:

    这是我自己在 Fedora 上使用的简单 bash 脚本,它依赖于 rpm 包的 find-requires,你可以在 find-requires 里面找到它内部使用的工具。

    #!/bin/bash
    #
    # Use rpm to recursively list dependencies of all files in a directory
    #
    # Syntax:
    #   lsdep path/to/directory
    # Example:
    #   lsdep /usr/src/kernels/`uname -r`/
    
    find $1 -type f -exec sh -c 'res=`echo '{}' | /usr/lib/rpm/find-requires`; [ -n "$res" ] && (echo;echo file '{}'; echo $res)' \;
    

    【讨论】:

      猜你喜欢
      • 2012-08-11
      • 1970-01-01
      • 2015-03-05
      • 2011-10-01
      • 1970-01-01
      • 2011-10-29
      • 2012-02-24
      • 2011-12-31
      • 2022-10-24
      相关资源
      最近更新 更多