【问题标题】:arm-none-eabi-gcc: SECTIONS: unclear syntax *<archivename>.a:arm-none-eabi-gcc:部分:语法不明确 *<archivename>.a:
【发布时间】:2015-04-29 17:17:43
【问题描述】:

即使在阅读了几本手册页和指南之后,我也无法找到一个非常具体的问题的明确答案。我为标题中提到的工具链编写链接器脚本。在开发过程中,我试图将一个静态库(存档,.a)链接到我的 RAM 中的某个位置。我可以通过像处理常规 .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
...

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

谁能给我解释一下?

【问题讨论】:

  • 感谢您的更正以及类似问题的链接。我同意这两种情况都会导致相同的解决方案,但是我的问题是以更笼统的方式提出的。不仅在闪存部分的开头放置库时,很可能会遇到类似的问题。另一个问题是关于特定任务的,我的问题集中在语法上。
  • 我想澄清一下,当有人在寻找答案时,我正在考虑答案的可见性(“可搜索性”)。

标签: c gcc arm linker-scripts


【解决方案1】:

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

您还可以通过编写模式来指定存档中的文件 匹配档案,冒号,然后匹配文件的模式, 冒号周围没有空格。

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

【讨论】:

  • 这是another link to the same information。表单为archive:file,您可以在任一侧使用通配符,然后在该部分中使用通配符。
  • 感谢您的澄清引用和链接!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2022-10-19
  • 1970-01-01
相关资源
最近更新 更多