C++,python,热爱算法和机器学习
全部博文(1214)
分类: LINUX
2011-03-03 10:34:25
nm输出字符 | 含义 |
R | Read only symbol. 比如在代码中有一个const MAXDATA = 3095; 则MAXDATA就是一个Read only symbol |
N | 这是一个调试符号 |
D | 这是一个已经初始化的变量的符号。比如代码中int i = 1和char *str = "Hello"则i和str都是这种类型的符号 |
T | Text段的符号。子程序都是这种符号,比如文件中实现了一个函数function,则function就是这种符号 |
U | 未定义的符号。如果文件中引用了不存在的函数,则这些未定义的函数符号就是这种类型 |
S | 未初始化的符号,比如全局变量int s;则s的符号就是此类型 |
#include
static int s_global;
int i = 1;
char *str = "hello, world";
const ID = 10;
extern int e_global;
void function()
{
printf("Hello");
}
int get_x()
{
int x;
x = 33;
return x;
}
在执行"gcc -g -O -c a.c"产生a.o之后,用"nm -A a.o"的输出为:
a.o:00000000 R ID
a.o:00000000 T function
a.o:00000014 T get_x
a.o:00000000 D i
a.o: U printf
a.o:00000000 b s_global
a.o:00000004 D str
nm的用法很简单,以下几个关键字比较常用:
1、"-A",列出符号名的时候同时显示来自于哪个文件。这在同时列出多个文件(比如一个链接库)的符号时比较有用
2、"-a",列出所有符号这将会把调试符号也列出来。默认状态下调试符号不会被列出。
3、"-l",列出符号在源代码中对应的行号指定这个参数后,nm将利用调试信息找出文件名以及符号的行号。对于一个已定义符号,将会找出这个符号定义的行号,对于未定义符号,显示为空
4、"-n",根据符号的地址来排序默认是按符号名称的字母顺序排序的
5、"-u",只列出未定义符号同"--undefined-only", 而"--defined-only"将只列出已定义符号