如何查看 Linux 共享库正在导出的函数列表?
- 2024-10-14 08:40:00
- admin 原创
- 264
问题描述:
我想查看 Linux 上共享库的导出函数。
什么命令允许我做到这一点?
(在 Windows 上我使用该程序取决于)
解决方案 1:
您需要的是nm
及其-D
选项:
$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
U atanf
U calloc
.
.
.
导出的符号用 表示T
。必须从其他共享对象加载的必需符号用 表示U
。请注意,符号表不仅包含函数,还包含导出的变量。
请参阅nm
手册页以了解更多信息。
解决方案 2:
objdump -T *.so
也可以做
解决方案 3:
除了上述提到的工具之外,您还可以使用readelf
(manual)。它与 类似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)
解决方案 4:
在 MAC 上,您需要使用nm *.o | c++filt
,因为中没有-C
选项nm
。
解决方案 5:
以防万一有 Mac 用户看到这里,请使用 llvm-cxxdump 或 llvm-readelf -sW
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD