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

What is absolute symbol and how to define it in C?

nm 的手册页中。它说

“A” The symbol's value is absolute, and will not be changed by further linking.

但是,我不知道那是什么意思。我怎样才能定义一个变量或其他东西来使它的值成为绝对值 in C?

如果我在其文件作用域test.c中声明一个变量

int a;

然后在 nm 的输出中,a 的条目在我的机器上将如下所示

0000000000000004 C a

所以我想知道我该怎么做才能使变量的 nm 输出“A”。而且我不知道“绝对”是什么意思。

当 C 编译器编译您的程序时,除了程序的二进制代码之外,它还会生成一个符号列表。您将看到的最常见类型是 Us(对于 "undefined")、Ds 和 Ss(对于全局数据)和 Ts(对于 "text" 段,这是可执行代码所在的位置)。

As 或 absolute(不可移动)符号用于支持嵌入式开发,其中需要将事物放置在内存中的绝对地址。通常只有在为嵌入式系统进行交叉编译时才会生成此类符号,使用允许您指定绝对地址的 C 语言扩展。典型的语法如下所示:

unsigned char buf[128]@0x2000;

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