ubuntu下編譯c程序的詳解

1、c語言中的各種後綴名代表的意思:

.a文件代表的是靜態庫

.c代表c源代碼

.h代表c源代碼頭文件

.i代表的是c源代碼(這是被預處理過後的結果)

.o對象文件

.s彙編語言的代碼

.so動態庫

2、c語言程序從源代碼到生成可執行文件的過程:c程序源代碼(.c文件)-----(1)-----不用預處理的c程序源代碼(.i文件)----(2)---彙編語言文件(.s文件)------(3)-----機器語言文件(.o文件)-----(4)------可執行文件

其中的每個過程的意義如下:過程(1)是預處理階段,這個階段主要是根據#開頭的命令修改c源文件,主要的工作是,比如#include<stdio.h>命令告訴預處理器讀取系統文件stdio.h的內容並且把相應的內容插入到源代碼中去,就形成了.i文件。

過程(2):這個過程是編譯階段,編譯器將文本文件.i文件翻譯成文本文件.s文件。這個文件是與源文件等效的彙編語言程序。

過程(3):這個過程主要是彙編階段,在這個階段中彙編器將.s文件編譯成機器語言指令就是這裏的.o文件。

過程(4):這個過程是鏈接階段,這個階段主要就是將程序中的一些庫函數用鏈接器給進行鏈接(鏈接過程包括靜態鏈接和動態鏈接,在這裏就不細說了)。

3、講一下ubuntu下面c源程序的各種文件的獲得:(比如有一個源程序爲hello.c文件)

(1)、爲了獲得可執行文件可以使用命令:gcc hello.c -o a其中-o是用來指定所生成的可執行程序的文件名,比如這裏生成的文件名是a。

(2)、如果程序中用到了不是gcc默認的庫函數的時候,比如程序中用到了math.h這個頭文件。這個頭文件不是gcc默認的頭文件,所以在編譯的時候要加入-l庫的首字母來進行編譯。比如這裏是:gcc hello.c -lm -o a.

(3)、爲了將源程序編譯成.o文件的命令是指定參數-c來進行編譯。例如這裏要生成hello.o文件的編譯爲:gcc -c hello.c -o hello.o。

(4)如果要執行預處理的話,使用的編譯代碼就是加上參數-E來進行編譯,比如我們這裏要生成hello.i文件,則我們編譯代碼是:gcc -E hello.c -o hello.i。

(5)、如果要生成彙編代碼,使用的編譯代碼就是加上參數-S進行編譯,比如我們要生成hello.s文件,則我們使用的編譯代碼是:gcc -S hello.c -o hello.s。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章