placing static library answer in the beginning of

2019-02-18 18:24发布

问题:

I'm using atmelstudio to compile a firmware image and want to place the functions from static libraries (including the gnu's libc.a & libgcc.a) in the beginning of the .text section followed .text belong to my project source code. Right now what happen is the other way around.

This is my linker script

    . = 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:

The star in *(.text), means to match any object file. You need to give the name for the libc and put it first. These are called input sections in the gnu ld manual. The syntax according to the manual is libc.a:(.text), you may order specific objects within a library, with libc.a:strcmp.o(.text).

See: Gnu Ld section 3.6.4.1 Input Section Basics for detailed information.


A solutions might be,

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