1、首先,寫一個簡單的C源文件:HelloWorld
#include <stdio.h>int main(){ printf("/nHello World!/n/n"); return 0;}
2、下面是調用gcc命令編譯HelloWorld.c的過程:
[root@localhost gcc_test]# ls -l
total 4
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
// gcc的-E選項,可以讓編譯器在預處理後停止,並輸出預處理結果。
[root@localhost gcc_test]# gcc -E HelloWorld.c -o step1.i
[root@localhost gcc_test]# ls -l
total 24
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
// gcc的-S選項,表示在生成匯編代碼後停止,-o輸出匯編代碼文件。
[root@localhost gcc_test]# gcc -S step1.i -o step2.s
[root@localhost gcc_test]# ls -l
total 28
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
// gas匯編器負責將生成的匯編代碼文件編譯為目標文件
[root@localhost gcc_test]# gcc -c step2.s -o step3.o
[root@localhost gcc_test]# ls -l
total 32
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o
// gcc連接器,負責將程序的目標文件與所需的所有附加的目標文件連接起來,最終生成可執行文件。附加的目標文件包括靜態連接庫和動態連接庫。
[root@localhost gcc_test]# gcc step3.o -o step4_result
[root@localhost gcc_test]# ls -l
total 40
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o
-rwxr-xr-x 1 root root 4734 Sep 11 00:23 step4_result
// 執行可執行程序
[root@localhost gcc_test]# ./step4_result
Hello World!
[root@localhost gcc_test]#
3、上述拆分的過程完全可以一步執行:
[root@localhost gcc_test]# gcc HelloWorld.c -o result
[root@localhost gcc_test]# ls -l
total 48
-rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c
-rwxr-xr-x 1 root root 4734 Sep 11 00:39 result
-rw-r--r-- 1 root root 18020 Sep 11 00:22 step1.i
-rw-r--r-- 1 root root 454 Sep 11 00:22 step2.s
-rw-r--r-- 1 root root 880 Sep 11 00:23 step3.o
-rwxr-xr-x 1 root root 4734 Sep 11 00:23 step4_result
[root@localhost gcc_test]# ./result
Hello World!
[root@localhost gcc_test]#