我正在使用 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.*)
明星在*(.text)
, 表示匹配任何目标文件。您需要给出 libc 的名称并将其放在第一位。这些被称为输入部分在 gnu ld 手册中。根据手册的语法是libc.a:(.text)
,您可以订购库中的特定对象,使用libc.a:strcmp.o(.text)
.
See: Gnu Ld 第 3.6.4.1 节输入节基础知识获取详细信息。
解决方案可能是,
KEEP(*(.vectors .vectors.))
.a:(.text .text. .rodata .rodata*) <-- this line
*(.text .text. .gnu.linkonce.t.*)
*(.glue_7t) *(.glue_7)
*(.rodata .rodata .gnu.linkonce.r.*)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)