什么是绝对符号以及如何在C中定义它?

时间:2015-10-24 22:33:08

标签: c linker ld linker-scripts relocation

nm的手册页中。它说

  

“A”符号的值是绝对值,不会因进一步链接而改变。

但是,我不知道这意味着什么。如何定义变量或其他内容以使其值在C 中绝对

如果我在test.c的文件范围中声明变量

int a;

然后在nm的输出中,a的条目将在我的机器上显示以下内容

0000000000000004 C a

所以我想知道如何为变量设置nm输出“A”。我不知道“绝对”是什么意思。

1 个答案:

答案 0 :(得分:2)

当C编译器编译程序时,除了程序的二进制代码外,它还会生成一个符号列表。您将看到的最常见类型是U s(用于“未定义”),DS s(用于全局数据)和T s (对于“文本”段,可执行代码的位置)。

A绝对(不可移动)符号用于支持嵌入式开发,其中需要将内容放置在内存中的绝对地址处。通常,只有在对嵌入式系统进行交叉编译时才会产生这样的符号,使用C语言扩展来指定绝对地址。典型的语法如下所示:

unsigned char buf[128]@0x2000;

这不是标准C,但它是嵌入式系统的扩展。像这样的代码会产生一个在地址buf设置的绝对符号0x2000,它不能被链接器移动。