如何查看Linux .so或.a对象并查看它们包含哪些函数?

int*_*tar 5 c c++ unix static-libraries

链接器可能会这样做,所以是否有一个命令行工具列出目标文件中的函数并告诉我函数及其签名的名称?

Cha*_*Kim 5

你可以做nm Linux.so,它将显示.so文件中的函数和变量.

  • “.so”文件需要一个“-D”标志 (2认同)

Kaz*_*Kaz 5

对于共享库,您必须使用:

nm -D /path/to/libwhatever.so.<num>
Run Code Online (Sandbox Code Playgroud)

没有-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
Run Code Online (Sandbox Code Playgroud)

在这个系统libc.so上剥离了调试符号,因此nm没有显示任何内容; 但当然有动态链接机制的符号显示nm -D.

对于.a存档或.o目标文件,只需nm.符号是符号; 如果这些文件被剥离,则这些对象不能用于链接.