什么是绝对符号以及如何在 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 编译器编译您的程序时,除了程序的二进制代码之外,它还会生成一个符号列表。您将看到的最常见类型是 U
s(对于 "undefined")、D
s 和 S
s(对于全局数据)和 T
s(对于 "text" 段,这是可执行代码所在的位置)。
A
s 或 absolute(不可移动)符号用于支持嵌入式开发,其中需要将事物放置在内存中的绝对地址。通常只有在为嵌入式系统进行交叉编译时才会生成此类符号,使用允许您指定绝对地址的 C 语言扩展。典型的语法如下所示:
unsigned char buf[128]@0x2000;
虽然这不是标准的 C,但它是嵌入式系统的扩展。像这样的代码会产生一个绝对符号 buf
设置在地址 0x2000
,它不能被链接器移动。
在 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 编译器编译您的程序时,除了程序的二进制代码之外,它还会生成一个符号列表。您将看到的最常见类型是 U
s(对于 "undefined")、D
s 和 S
s(对于全局数据)和 T
s(对于 "text" 段,这是可执行代码所在的位置)。
A
s 或 absolute(不可移动)符号用于支持嵌入式开发,其中需要将事物放置在内存中的绝对地址。通常只有在为嵌入式系统进行交叉编译时才会生成此类符号,使用允许您指定绝对地址的 C 语言扩展。典型的语法如下所示:
unsigned char buf[128]@0x2000;
虽然这不是标准的 C,但它是嵌入式系统的扩展。像这样的代码会产生一个绝对符号 buf
设置在地址 0x2000
,它不能被链接器移动。