技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機(jī)純凈版,64位旗艦版,綠色軟件,免費(fèi)軟件下載基地!

當(dāng)前位置:主頁 > 教程 > 服務(wù)器類 >

Linux下編譯C文件的過程

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-06-22 06:23┆點(diǎn)擊:

1、首先,寫一個簡單的C源文件:HelloWorld

#include <stdio.h>int main(){ printf("/nHello World!/n/n"); return 0;}

2、下面是調(diào)用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選項(xiàng),可以讓編譯器在預(yù)處理后停止,并輸出預(yù)處理結(jié)果。
[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選項(xiàng),表示在生成匯編代碼后停止,-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匯編器負(fù)責(zé)將生成的匯編代碼文件編譯為目標(biāo)文件
[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連接器,負(fù)責(zé)將程序的目標(biāo)文件與所需的所有附加的目標(biāo)文件連接起來,最終生成可執(zhí)行文件。附加的目標(biāo)文件包括靜態(tài)連接庫和動態(tài)連接庫。
[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

// 執(zhí)行可執(zhí)行程序
[root@localhost gcc_test]# ./step4_result 


Hello World!


[root@localhost gcc_test]# 
 

3、上述拆分的過程完全可以一步執(zhí)行:

[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]#