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

ljb*_*ade 176 linux export shared-libraries

我想在Linux上查看共享库的导出函数.

什么命令允许我这样做?

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

thk*_*ala 287

你需要的是nm它的-D选择:

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
         U atanf
         U calloc
.
.
.
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参见nm 手册页.

  • 或者,如果您只想查看导出的符号,请添加"--defined-only"标志.例如:"nm -D --defined-only /lib/libtest.so" (16认同)
  • 在Mac OS X上只使用`nm`而不带`-D`标志. (3认同)
  • nm -D libmy.so | nm -D libmy.so | nm -D libmy.so 查找“T” (2认同)
  • 如果需要 C++ 名称重组,请添加 -C (2认同)

use*_*685 37

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


小智 5

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


Mar*_*ska 5

在其他已经提到的工具中,您也可以使用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)
Run Code Online (Sandbox Code Playgroud)