代码之家  ›  专栏  ›  技术社区  ›  Rook

如何列出编译库中包含的可用函数等?

  •  10
  • Rook  · 技术社区  · 16 年前

    如何确定函数是否存在于库中,或者列出已编译库中的函数?

    5 回复  |  直到 16 年前
        1
  •  18
  •   codelogic    16 年前

    你可以使用 nm 命令列出静态库中的符号。

    nm -g -C <libMylib.a>
    
        2
  •  10
  •   Johannes Schaub - litb    16 年前

    对于ELF二进制文件,可以使用readelf:

    readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
    

    -s 列表符号 -W :不要剪太长的名字

    然后,AWK命令将过滤掉所有的函数,C++ FLT将对它们进行解压缩。这意味着它将从内部命名方案转换它们,以便以人类可读的形式显示它们。它输出与此类似的名称(取自boost.filesystem lib):

    285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()
    

    没有C++的FLT,该名称将显示为 _ZN5boost9exceptionD0Ev

        3
  •  7
  •   Jonathan Leffler    16 年前

    对于Microsoft工具, link /dump /symbols <filename> “会给你血淋淋的细节。可能还有其他方法(或选项)来提供更易于阅读的列表。

        4
  •  6
  •   Community CDub    8 年前

    在Linux/Unix下,您可以使用 objdump -T 列出给定对象中包含的导出符号。窗户下面有 dumpbin (Irc) dumpbin /exports )请注意,C++函数名称被重载以允许重载。

    编辑:看到代码逻辑后 anwser 我记得objdump也理解-c来执行去管理。

        5
  •  4
  •   Oren Shemesh    16 年前

    使用此命令:

    objdump-t“你的图书馆”

    它打印的内容会超出您的要求——不仅是函数名,还有整个符号表。检查你得到的符号的各种属性,你将能够从变量和东西中分类出函数。