如何查看 Linux 共享库正在导出的函数列表?
Posted
技术标签:
【中文标题】如何查看 Linux 共享库正在导出的函数列表?【英文标题】:How do I view the list of functions a Linux shared library is exporting? 【发布时间】:2011-05-29 17:20:07 【问题描述】:我想在 Linux 上查看共享库的导出函数。
什么命令允许我这样做?
(在Windows上我使用的程序取决于)
【问题讨论】:
类似问题:How do i find out what all symbols are exported from a shared object? 【参考方案1】:万一某些 Mac 用户正在查看这里,请使用 llvm-cxxdump 或 llvm-readelf -sW
【讨论】:
【参考方案2】:在其他已经提到的工具中,您还可以使用readelf
(manual)。它类似于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)
【讨论】:
我应该如何使用 readelf 找到导出的符号?它给了我大量的输出。 @JurajMartinkareadelf -sW *.so > out.txt
这会将输出写入文件。【参考方案3】:
在 MAC 上,您需要使用nm *.o | c++filt
,因为nm
中没有-C
选项。
【讨论】:
【参考方案4】:objdump -T *.so
也可以完成这项工作
【讨论】:
【参考方案5】:您需要的是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 了解更多信息。
【讨论】:
或者,如果您只想查看导出的符号,请添加“--defined-only”标志。例如:“nm -D --defined-only /lib/libtest.so” 在 Mac OS X 上只需使用nm
而不使用 -D
标志。以上是关于如何查看 Linux 共享库正在导出的函数列表?的主要内容,如果未能解决你的问题,请参考以下文章