如何列出从.so文件导出的符号?如果可能的话,我还想知道它们的来源(例如,它们是不是从静电图书馆里拉进来的).

如果有区别的话,我使用的是GCC4.0.2.

推荐答案

列出符号的标准工具是nm,您可以简单地使用它,如下所示:

nm -gD yourLib.so

如果您想要查看C++库的符号,可以添加"-C"选项来go 除符号的Angular (它的可读性要好得多).

nm -gDC yourLib.so

如果您的.so文件为ELF格式,您有两个 Select :

objdump(-C对Demanling C++也很有用):

$ objdump -TC libz.so

libz.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000002010 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __errno_location
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable

或使用readelf:

$ readelf -Ws libz.so
Symbol table '.dynsym' contains 112 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000002010     0 SECTION LOCAL  DEFAULT   10
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.2.5 (14)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __errno_location@GLIBC_2.2.5 (14)
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable

C++相关问答推荐

如何在Scilab API中求解方程

球体—立方体重叠:无、部分或全部?

C中出现分段错误后关闭文件

如何将不同长度的位转换成字节数组?

在C语言中,是否可以使枚举数向后计数?

Kdb:仅升级指定的列

C中的FREE函数正在触发断点

为什么函数是按照定义的顺序执行的,而不是按照从avr-c中的int main()调用的顺序执行的?

使用TCL C API导航到列表中的元素

关于scanf()和空格的问题

GCC奇怪的行为,有fork 和印花,有换行符和不换行符

添加函数会 destruct 嵌入式C代码(无IDE)

运行时错误:在索引数组时加载类型为';char';`的空指针

C程序向服务器发送TCPRST

静态初始化顺序失败是否适用于C语言?

我不知道为什么它不能正常工作,我用了get()和fget(),结果是一样的

用C++高效解析HTTP请求的方法

为什么我的旧式&q;函数在传递浮点数时会打印2?

在C中定义函数指针?

free后内存泄漏?