如何查看Linux共享库正在导出的函数列表?

查看Linux下共享库导出的函数。

什么命令允许我这样做?

(在Windows上我使用的程序取决于)

251945 次浏览

你需要的是nm和它的-D选项:

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.

导出的sumbol由T表示。必须从其他共享对象加载的必需符号有U。注意,符号表不仅包括函数,还包括导出的变量。

更多信息请参见nm 手册页

objdump -T *.so也可以做这个工作

在MAC上,你需要使用nm *.o | c++filt,因为在nm中没有-C选项。

在其他已经提到的工具中,你还可以使用readelf (手册)。它类似于objdump,但更详细。请参见了解差异的解释。

$ readelf -sW /lib/liblzma.so.5 |head -n10


Symbol table '.dynsym' contains 128 entries:
Num:    Value  Size Type    Bind   Vis      Ndx Name
0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
1: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_unlock@GLIBC_2.0 (4)
2: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_destroy@GLIBC_2.0 (4)
3: 00000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable
4: 00000000     0 FUNC    GLOBAL DEFAULT  UND memmove@GLIBC_2.0 (5)
5: 00000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.0 (5)
6: 00000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@GLIBC_2.0 (5)

为了防止Mac用户看到这里,请使用llvm-cxxdump或llvm-readelf -sW