我创建了一个链接描述文件作为 memory.ld –
MEMORY
{
MYMEMORY(rw) : ORIGIN = 0x0041c620 , LENGTH = 30
}
.myvars (NOLOAD) :
{
*(.myvarloc)
} > MYMEMORY
In my c program :
__attribute__((section(".myvarloc")))
uint8 measurements[30];
我在 Linux RTOS 上使用 Eclipse IDE。 我在eclipse中的项目--属性--链接器--库--杂项中添加了-T memory.ld 我创建这个是因为: 我想要一个固定的内存地址,用于从 0x0041c620 开始的大小为 30 的变量测量。
我的问题: 这是正确的做法吗? 如果我确实像上面那样:我收到错误为 – 链接器输入文件未使用且链接未完成。
注意:我正在重新发布问题。
最佳答案
这很可能是因为 Eclipse 不直接调用链接器。相反,它使用 gcc
(或 g++
)作为包装器,进而使用默认链接器脚本调用链接器。
如果您要针对内存固定的特定目标进行交叉编译,则最好的选择可能是制作自己的 makefile 来直接调用链接器。
如果您不是交叉编译,而是为例如构建Windows 或 Linux,那就不要做你正在做的事情!您并不真正知道链接描述文件中的虚拟地址实际上可供您使用。而且您不能使用它在进程之间共享内存,因为一个进程中的虚拟地址实际上可能与另一个进程中的相同虚拟地址不同(即使两个进程是从同一个可执行文件创建的)。而是阅读 shared memory或其他inter-process communication方法。
关于c - 如何解决这个链接描述文件错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21558216/