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

时间:2010-12-22 23:44:16

标签: linux export shared-libraries

我想在Linux上查看共享库的导出功能。

什么命令允许我这样做?

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

5 个答案:

答案 0 :(得分:265)

您需要的是nm及其-D选项:

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

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

有关详细信息,请参阅nm manual page

答案 1 :(得分:33)

objdump -T *.so也可以完成这项工作

答案 2 :(得分:3)

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

答案 3 :(得分:2)

在其他已经提到的工具中,您也可以使用readelfmanual)。它类似于objdump,但更详细。有关差异说明,请参见this

$ 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)

答案 4 :(得分:0)

以防某些 Mac 用户正在查看这里,请使用 llvm-cxxdump 或 llvm-readelf -sW