它是关于 GNU 链接器的。
我有一个(比方说)名为 myVar
的变量。现在我希望我的变量被放置在内存中的某个地址。
我使用的编译器有一个 __attribute__ ((blablabla))
可以解决这个问题。但是我决定使用链接描述文件。
从现在开始,我设法将变量放在链接描述文件中的特定地址,就像这样:
myVar = 0xDEAD;
而且它确实有效。问题是链接器很愚蠢,偶尔会在我的地址上部署其他变量。两者在某种程度上都像在 union
中一样。
我想我需要以某种方式告诉链接器这个长度的地址已被占用,不应该被触及。
无论如何,我猜你明白了。有帮助吗?
最佳答案
我会开始合并 C 源代码和链接器。
在链接描述文件中定义一个新部分,例如:
MEMORY
{
...
my_data (rwx) : ORIGIN = your_start_addr, LENGTH = section_length
}
SECTIONS
{
/* ... */
.myVarSection section_address :
{
KEEP(*(.mySection))
} > my_data
/* ... */
}
然后您可以在源文件中定义您的变量,例如:
uint16_t __attribute__((section (".mySection"))) myVar = 0xDEAD;
关于c++ - 如何通过链接器脚本将符号放置在特定地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38239722/