在nm
. 它说
“A” 符号的值是绝对值,不会通过进一步的链接而改变。
不过,我不知道那是什么意思。如何定义变量或其他内容以使其值在 C 中是绝对值?
test.c
如果我在其文件范围内声明一个变量
int a;
然后在 的输出中nm
, a 的条目将在我的机器上如下所示
0000000000000004 C a
所以我想知道我该怎么做才能使nm
变量的输出为“A”。而且我不知道“绝对”是什么意思。
在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,它是嵌入式系统的扩展。buf
像这样的代码会在 address产生一个绝对符号集0x2000
,链接器不能移动它。