3

atmelstudio を使用してファームウェア イメージをコンパイルしており、スタティック ライブラリ (gnu の libc.a と libgcc.a を含む) の関数を .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.*)
4

1 に答える 1

4

の星印は*(.text)、任意のオブジェクト ファイルに一致することを意味します。libc の名前を指定して、最初に配置する必要があります。これらは、gnu ld マニュアルでは入力セクションと呼ばれます。マニュアルによる構文はです。libc.a:(.text)ライブラリ内の特定のオブジェクトを で注文できますlibc.a:strcmp.o(.text)

詳細については、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.*)
于 2014-03-19T14:49:21.067 に答える