如何确定库中是否存在函数,或列出已编译库中的函数?
答案 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“你的图书馆”
它将打印超出您想要的内容 - 不仅仅是函数名称,还包括整个符号表。检查你得到的符号的各种属性,你就可以从变量和东西中找出函数。