什么是绝对符号以及如何在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 ,它不能被链接器移动。