在nm
的手册页中。它说
“A”符号的值是绝对值,不会因进一步链接而改变。
但是,我不知道这意味着什么。如何定义变量或其他内容以使其值在C 中绝对?
如果我在test.c
的文件范围中声明变量
int a;
然后在nm
的输出中,a的条目将在我的机器上显示以下内容
0000000000000004 C a
所以我想知道如何为变量设置nm
输出“A”。我不知道“绝对”是什么意思。
答案 0 :(得分:2)
当C编译器编译程序时,除了程序的二进制代码外,它还会生成一个符号列表。您将看到的最常见类型是U
s(用于“未定义”),D
和S
s(用于全局数据)和T
s (对于“文本”段,可执行代码的位置)。
A
或绝对(不可移动)符号用于支持嵌入式开发,其中需要将内容放置在内存中的绝对地址处。通常,只有在对嵌入式系统进行交叉编译时才会产生这样的符号,使用C语言扩展来指定绝对地址。典型的语法如下所示:
unsigned char buf[128]@0x2000;
这不是标准C,但它是嵌入式系统的扩展。像这样的代码会产生一个在地址buf
设置的绝对符号0x2000
,它不能被链接器移动。