如何确定库中是否存在函数,还是列出已编译库中的函数?
您可以使用nm命令列出静态库中的符号.
nm -g -C
对于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
对于Microsoft工具," link /dump /symbols
"将为您提供血腥的详细信息.可能还有其他方式(或选项)可以提供更易于阅读的列表.
在Linux/Unix下,您可以使用objdump -T
列出给定对象中包含的导出符号.在Windows下有dumpbin
(IIRC dumpbin /exports
).请注意,C++函数名称被修改以允许重载.
编辑:在看到codelogic的anwser后,我记得objdump也理解-C来执行去整理.