我正在使用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.*)
答案 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.*)