在Linux 下使用gcc來編譯程序時,只需使用:(假設源代碼文件的文件名爲main.c)
gcc main.c
./a.out
然而該過程可分解爲四步:預處理、編譯、彙編、鏈接。
1.預處理:gcc -E main.c -o main.i
生成 .i 文件
刪除註釋,處理預處理指令,將包含的頭文件展開
2.編譯:gcc -S main.i (gcc -S main.i -o main.s)
生成 .s 文件
詞法分析、語法分析、語義分析
3.彙編:gcc -c main.s
生成 .o 文件,
或使用gcc命令:gcc -c main.c -o main.o
從源代碼文件開始,經過預編譯、編譯、和彙編直接輸出目標文件 .obj
將彙編指令翻譯成二進制生成符號表,生成各種段
4.鏈接:gcc main.o 生成 a.out 最終可執行文件
gcc main.o -o main
鏈接的主要內容是把各個模塊之間相互引用的部分都處理好,使得各個模塊之間能夠正常的銜接。鏈接的主要過程包括地址和空間分配、符號決議和重定位等。