在使用 nm
命令查看 .o
对象文件时,输出中的函数名或其他符号前缀有特定的含义:
-
T
:表示该符号是一个文本(Text)符号,通常用于代码段(code section)。这意味着它是一个程序的代码入口点,比如一个函数的开始地址。 -
D
:表示该符号是一个数据(Data)符号,通常用于初始化数据段(initialized data section)。这通常指的是全局变量或静态变量。 -
B
:表示该符号是一个未初始化的全局或静态变量,位于未初始化数据段(BSS section)。 -
R
:表示该符号是一个只读数据符号,通常用于只读数据段(read-only data section)。 -
C
:表示该符号是一个常量(Constant),通常用于常量数据段。 -
U
:表示该符号是未定义(Undefined)的,也就是说它在当前的.o
文件中声明了,但是没有定义。这通常意味着它可能在其他.o
文件或库中定义。 -
W
:表示该符号是一个弱引用(Weak),它允许在其他编译单元中有相同名称的符号覆盖这个符号。 -
A
:表示该符号是一个绝对地址的符号。 -
I
:表示该符号是一个调试信息(Debugging)符号。 -
N
:表示该符号是一个非标准(Non-standard)符号。
在使用 nm
命令时,你可以通过添加不同的选项来改变输出格式或过滤输出结果。例如,nm -D
可以以十六进制的形式显示地址,nm -S
可以按大小排序输出。