【发布时间】:2016-12-17 15:51:38
【问题描述】:
链接器大概可以做到这一点,那么是否有一个命令行工具可以列出目标文件中的函数并告诉我函数的名称和它们的签名?
【问题讨论】:
标签: c++ c unix static-libraries
链接器大概可以做到这一点,那么是否有一个命令行工具可以列出目标文件中的函数并告诉我函数的名称和它们的签名?
【问题讨论】:
标签: c++ c unix static-libraries
对于共享库,您必须使用:
nm -D /path/to/libwhatever.so.<num>
没有-D,nm 转储调试符号; -D 指的是实际用于动态链接的动态符号。来自 Ubuntu 12 会话:
$ nm /lib/i386-linux-gnu/libc.so.6
nm: /lib/i386-linux-gnu/libc.so.6: no symbols
$ nm -D /lib/i386-linux-gnu/libc.so.6 | tail
0011fc20 T xdr_wrapstring
001202c0 T xdrmem_create
00115540 T xdrrec_create
001157f0 T xdrrec_endofrecord
00115740 T xdrrec_eof
00115690 T xdrrec_skiprecord
00120980 T xdrstdio_create
00120c70 T xencrypt
0011d330 T xprt_register
0011d450 T xprt_unregister
在这个系统上libc.so 被去掉了调试符号,所以nm 什么也不显示;但当然有nm -D揭示的动态链接机制的符号。
对于.a 存档或.o 目标文件,只需nm。符号就是符号;如果这些文件被剥离,这些对象就不能用于链接。
导出的 sumbols 由
T表示。必须从其他共享对象加载的必需符号具有U。请注意,符号表不仅包括函数,还包括导出的变量。
或者,如果您只想查看导出的符号,请添加
--defined-only标志。例如:nm -D --defined-only /lib/libtest.so
【讨论】:
您可以使用nm Linux.so,它会显示 .so 文件中的函数和变量。
【讨论】:
.o 或.a(静态存档)文件。有一些选项可以告诉您.a 文件中的哪些目标文件也包含哪些符号。
-D 标志用于.so 文件