您如何列出已编译库中包含的可用功能等?

时间:2008-12-24 19:53:36

标签: c++ linker ld

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

5 个答案:

答案 0 :(得分:18)

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

nm -g -C <libMylib.a>

答案 1 :(得分:10)

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

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

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

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

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

如果没有c ++ filt,名称将显示为_ZN5boost9exceptionD0Ev

答案 2 :(得分:7)

对于Microsoft工具,“link /dump /symbols <filename>”会为您提供血腥的详细信息。可能有其他方式(或选项)可以提供更易于阅读的列表。

答案 3 :(得分:6)

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

编辑:在看到codelogic的anwser后,我记得objdump也理解-C来执行去整理。

答案 4 :(得分:4)

使用此命令:

objdump -t“你的图书馆”

它将打印超出您想要的内容 - 不仅仅是函数名称,还包括整个符号表。检查你得到的符号的各种属性,你就可以从变量和东西中找出函数。