arm-none-eabi-gcc: SECTIONS: 语法不清晰 *<archivename>.a:

arm-none-eabi-gcc: SECTIONS: unclear syntax *<archivename>.a:

我无法找到一个非常具体的问题的明确答案,即使在阅读了几个手册页和指南之后也是如此。我正在为标题中提到的工具链编写 linker 脚本。在开发过程中,我将 link 一个静态库(已存档,.a)绑定到我的 RAM 中的某个位置。我可以 not 通过像处理常规 .o 文件一样处理它来完成此任务,如以下示例所示:

SECTIONS {
  outputa 0x10000 :
    {
    all.o
    foo.o (.input1)
    }
  outputb :
    {
    foo.o (.input2)
    foo1.o (.input1)
    }
  outputc :
    {
    *(.input1)
    *(.input2)
    }
}

经过长途跋涉,我在另一个Question中找到了提示。这让我想到了我目前的解决方案:

...
    .ramlib : ALIGN(4)
        {
            *liblpcspifilib_M3.a: (*);
        } > RamLoc40  AT>MFlashA512
...

请注意冒号语法。这将link所有liblpcspifilib的内容作为一个块到Ram。然而,如果没有“:”,它不会 link 任何东西。即使在我找到解决问题的方法之后,我也找不到关于该行为的任何其他信息。

谁能给我解释一下?

由于某些原因很难在官方 GNU 文档中找到此信息,因此我认为它是某种扩展。 Here 第 50 页告诉我们:

You can also specify files within archives by writing a pattern matching the archive, a colon, then the pattern matching the file, with no whitespace around the colon.

‘archive:file’ matches file within archive
‘archive:’ matches the whole archive
‘:file’ matches file but not one in an archive