我正在編譯「-nostdlib」下面的代碼。我的理解是,arm-none-eabi-gcc不會使用「crt0.o」中的_start,但它會使用用戶定義的_start來使用中的。爲此,我希望創建一個start.S文件並放置_start符號。爲什麼不用arm-none-eabi-gcc搜索我的自定義_start符號?
但是,如果我編譯下面顯示的代碼沒有從我身邊定義的_start符號,我沒有得到任何警告。我期待「警告:找不到入門標誌_start;」
問題:
1)爲什麼我沒有得到警告? GCC從哪裏獲得_start符號? 2)如果gcc從某個文件中得到了_start符號,你能讓我知道如何讓GCC從我的start.S文件中使用_start嗎?
$貓test.c的
int main()
{
volatile int i=0;
i = i+1;
return 0;
}
$貓linker.ld
MEMORY
{
ram : ORIGIN = 0x8000, LENGTH = 20K
}
SECTIONS
{
.text : { *(.text*) } > ram
.bss : { *(.bss*) } > ram
}
$手臂 - 無 - EABI - 海合會-Wall -Werror -O2 -mfpu = neon-vfpv4 -mfloat-abi = hard -march = armv7 -a -mtune = cortex-a7 -nostdlib -T linker.ld t est.c -o test.o
$臂無 - EABI - 海合會--version
臂無 - EABI-GCC(GNU工具ARM嵌入式處理器)4.9.3 20150529>(發佈) [ARM /嵌入4_9-分支修訂224288]
-GCC中的-v選項沒有給出任何有關使用哪個crt0的信息。我搜索了crt0,crt1,* .S文件和_start。還有 - 很好,我沒有得到警告。 – robomon
你用* arm-none-eabi-gcc -v -Wall -Werror -O2來鏈接*嗎? –
是的我鏈接。因爲最後我定義了鏈接器文件,test.o也是我的最終輸出。在獨立模式下,這是「啓動功能」? – robomon