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