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

Ant*_*ony 12 c++ linker ld

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

cod*_*gic 21

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

nm -g -C <libMylib.a>
Run Code Online (Sandbox Code Playgroud)

  • -g-仅显示外部符号,-C-删除符号名称。 (2认同)

Joh*_*itb 11

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

readelf -sW a.out | awk '$4 == "FUNC"' | c++filt
Run Code Online (Sandbox Code Playgroud)

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

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

285: 0000bef0    91 FUNC    WEAK   DEFAULT   11 boost::exception::~exception()
Run Code Online (Sandbox Code Playgroud)

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


Mic*_*urr 7

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


Luc*_*nti 6

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

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


Ore*_*esh 5

使用这个命令:

objdump -t "你的图书馆"

它会打印出比你想要的更多——不仅仅是函数名,还有整个符号表。检查你得到的符号的各种属性,你将能够从变量和东西中梳理出函数。