【问题标题】:print the name of the library that defines a given symbol打印定义给定符号的库的名称
【发布时间】:2014-05-01 02:24:28
【问题描述】:

假设您有一个符号的名称(是否已解构)和一个动态链接到其他符号的库的名称,您想找出哪个库能够解析该符号。

我尝试使用nmobjdumpreadelf,但我找不到关于它的好文档,看起来用这个工具是不可能的。

gdb 提供了类似的东西,但它是一个调试器,我需要一些东西来快速查找,你知道如何在不启动调试会话的情况下执行此操作吗?

【问题讨论】:

    标签: c++ symbols objdump nm readelf


    【解决方案1】:

    您可以使用ld-linux.so.2 的调试工具在elf 对象中查找符号解析(示例是针对amd64,动态加载程序名称反映了这一事实):

     LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /bin/ls
    

    上面会根据曲调打印行:

     60157:     symbol=fclose;  lookup in file=/bin/ls [0]
     60157:     symbol=fclose;  lookup in file=/lib64/librt.so.1 [0]
     60157:     symbol=fclose;  lookup in file=/lib64/libcap.so.2 [0]
     60157:     symbol=fclose;  lookup in file=/lib64/libacl.so.1 [0]
     60157:     symbol=fclose;  lookup in file=/lib64/libc.so.6 [0]
     60157:     binding file /bin/ls [0] to /lib64/libc.so.6 [0]: normal symbol `fclose' [GLIBC_2.2.5]
    

    然后您可以通过 grep 输出找到您需要的任何信息。

    您可以在任何精灵对象上调用链接器,包括库:

    LD_DEBUG=symbols,bindings /lib/ld-linux-x86-64.so.2 /lib/libm.so.6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-21
      • 2019-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多