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 可以跟蹤程序的執行過程