在flash部分的开头放置静态库答案

时间:2014-03-19 06:26:39

标签: ld atmel binutils atmelstudio

我正在使用atmelstudio编译固件映像,并希望将静态库中的函数(包括gnu的libc.a和libgcc.a)放在.text部分的开头,然后.text属于我的项目源代码。现在发生的事情是相反的。

这是我的链接描述文件

    . = ALIGN(4);
    _sfixed = .;
    KEEP(*(.vectors .vectors.*))
    *(.text .text.* .gnu.linkonce.t.*)    <-- my functions and functions from static libraries are within this rule
    *(.glue_7t) *(.glue_7)
    *(.rodata .rodata* .gnu.linkonce.r.*)
    *(.ARM.extab* .gnu.linkonce.armextab.*)

1 个答案:

答案 0 :(得分:3)

*(.text)中的星号表示匹配任何目标文件。您需要为libc指定名称并将其放在第一位。这些在gnu ld手册中称为输入节。根据手册的语法为libc.a:(.text),您可以使用libc.a:strcmp.o(.text)在库中订购特定对象。

有关详细信息,请参阅:Gnu Ld section 3.6.4.1 Input Section Basics


解决方案可能是,

KEEP(*(.vectors .vectors.)) 
.a:(.text .text. .rodata .rodata*) <-- this line 
*(.text .text. .gnu.linkonce.t.*) 
*(.glue_7t) *(.glue_7) 
*(.rodata .rodata .gnu.linkonce.r.*)