GCC僅僅意味着GNU C Compiler。
gcc工作四個步驟:預處理,編譯,彙編,連接配接。
1.預處理:
編譯器将C源代碼中的包含的頭檔案如stdio.h編譯進來,使用者可以使用gcc的選項”-E”進行檢視。
用法:#gcc -E hello.c -o hello.i
2.編譯:
在這個階段中,Gcc首先要檢查代碼的規範性、是否有文法錯誤等,以确定代碼的實際要做的工作,在檢查無誤後,Gcc把代碼翻譯成彙編語言。使用者可以使用”-S”選項來進行 檢視,該選項隻進行編譯而不進行彙編,生成彙編代碼。
選項 -S
用法: gcc –S hello.i –o hello.s
作用:将預處理輸出檔案hello.i彙編成hello.s檔案。
3.彙編:
這個階段是把編譯階段生成的”.s”檔案轉成二進制目标代碼.
選項 -c
用法: gcc –c hello.s –o hello.o
作用:将彙編輸出檔案test.s編譯輸出test.o檔案。
4.連結:
這個階段實際就是連結位址,比如去動态庫找被調用的函數。
用法:gcc hello.o –o hello.exe
作用:将編譯輸出檔案hello.o連結成最終可執行檔案
【補充】
arm-linux-gcc -E 停留在預處理階段
arm-linux-gcc -S 停留在編譯階段,這時候的輸出檔案是彙編語言。
arm-linux-gcc -c 停留在彙編階段,這時候生成了二進制檔案
arm-linux-ld -Ttest=0x xxxxxxxx 指定代碼段的入口位址
arm-linux-objcopy - I elf32-littlearm -O binary xxx.bin 去頭生成機器碼
arm-linux-objdum -h 反彙編
arm-linux-as 彙編器
利用strace ./a.out 可以跟蹤程式的執行過程
轉載于:https://www.cnblogs.com/jfyl1573/p/6257004.html