c - 如何解决这个链接描述文件错误?

标签 c eclipse gcc linker linker-scripts

我创建了一个链接描述文件作为 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/

相关文章:

java - 串口版uid和eclipse

c++ - 非静态数据成员初始化程序中 lambda 函数的段错误

c - Eclipse 不做任何超链接或至少突出显示某些 *.h 文件和 *.S 的语法

linux - LLVM 上的系统调用/sysenter

编译器 gcc :error; no such file or directory

c - 决定必须由 super 用户调用 setgroups() 和 initgroups() 的机制是什么?

c - 当命令提示符正常执行时,为什么 Eclipse 在此 scanf() 命令上失败?

c - Linux 上的 pthread 执行

c - C语言中数组、&array、&array[0]的区别是什么?

java - JFrame + JOGL 仅在调整大小或最小化 + 最大化时显示内容