linux下編譯器的使用

2021-09-26 21:50:20 字數 2162 閱讀 4897

拿到乙個源程式首先需要進行預處理,預處理的結果便是將標頭檔案的內容放入這個檔案中,比如乙個c語言程式通常需要包含stdio.h標頭檔案,這個標頭檔案裡包含一些函式和變數的宣告,預處理便會將這個檔案裡的內容放入。

編譯階段,這個階段是將我們的c語言**翻譯成彙編**。

彙編階段,彙編階段表示將彙編的**翻譯成機器**,現在已經是乙個二進位制檔案。

鏈結階段,鏈結表示將一些函式的實現和目標**鏈結在一起,預處理階段只是將函式的宣告放入檔案中,並沒有將函式的實現放入其中因此需要進行鏈結才能執行。

經過鏈結階段以後便是可以執行的**了。

直接生成可執行**

gcc test.c

會自動生成a.out檔案 這個檔案可以直接執行

生成指定檔名的可執行檔案

gcc test.c -o test

會生成test的可執行檔案

只對檔案程序預處理

gcc test.c -o test.i -e

生成乙個test.i的檔案,這個檔案包含指定標頭檔案的內容

生成彙編檔案

gcc test.i -s -o test.s

生成乙個彙編表示的檔案

生成目標檔案

gcc test.s -c test.o

生成乙個二進位制的目標檔案 這個檔案不能直接執行 因為沒有進行鏈結

生成可執行檔案

gcc test.o -o test

生成可執行檔案

在預處理階段需要將標頭檔案的內容插入到源**中,系統預設搜尋的路徑是/usr/include,大部分標頭檔案都在這個檔案中,在原始檔中包含的方式為這種形式預設是搜尋的這個路徑,還有一種包含方式 "head.h"這種形式預設是搜尋的本目錄,有的時候可以直接指定要包含的標頭檔案eg:gcc test.c -o test -l dir 表示在指定的目錄下搜尋標頭檔案。

在linux下使用make命令會執行makefile檔案

makefile檔案的編寫規則

test:   mid.o add.o test.o    	//生成的檔案test後面是依賴的檔案

gcc mid.o add.o test.o -o test //執行的命令 鏈結操作

test.o: test.c am.h

gcc test.c -c -o test.o

mid.o: mid.c

gcc mid.c -c -o mid.o

add.o: add.c

gcc add.c -c -o add.o

看下面乙個例子

test.c

#include"am.h"

#includeint main()

mid.c

int mid(int a,int b)

add.c

int add(int a,int b)

am.h

int add(int a,int b);

int mid(int a,int b);

makefile

test: mid.o add.o test.o //生成的檔案test後面是依賴的檔案

gcc mid.o add.o test.o -o test //執行的命令 鏈結操作

test.o: test.c am.h

gcc test.c -c -o test.o

mid.o: mid.c

gcc mid.c -c -o mid.o

add.o: add.c

gcc add.c -c -o add.o

執行結果:

sun@ubuntu:~/project$ make

gcc mid.c -c -o mid.o

gcc add.c -c -o add.o

gcc test.c -c -o test.o

gcc mid.o add.o test.o -o test

make執行過程:

在輸入make命令時會自動尋找makefile或者makefile檔案

在執行第一條命令之前會檢查依賴的檔案是否存,在當依賴的檔案不存在時會先生成需要的依賴檔案。

當我們更新乙個已將編譯好的工程時,再執行make命令,會檢查依賴檔案更新的時間是否比生成目標的時間晚,如果比目標的時間晚時會執行編譯操作,表示這個檔案更新了需要重新生成。

Linux下的編譯器gcc的使用

首先了解編譯器在對 編譯的時候有以下的階段 1.預處理 進行巨集替換 2.編譯 生成彙編 3.彙編 生成機器可識別 也就是編譯成目標檔案 4.連線 生成可執行檔案或庫檔案 假設我寫了乙個test.c檔案,示例 第一階段 gcc e test.c o test.i 第二階段 gcc s test.i ...

Linux 下的 gcc, g 編譯器

linux自帶gcc 和 g 的 gcc引數詳解 gcc and g 分別是gnu的c c 編譯器 gcc g 在執行編譯工作的時候,總共需要4步 1.預處理,生成.i的檔案 2.將預處理後的檔案不轉換成組合語言,生成檔案.s 3.有彙編變為目標 機器 生成.o的檔案 4.連線目標 生成可執行程式 ...

Linux下gcc編譯器和g 編譯器的那些事兒

使用c c 程式設計大約有三四個年頭了。最開始涉及到微控制器 嵌入式linux等,都使用的是c語言,那時主要寫linux驅動,甚至在arm板上寫linux應用程式時需要應用物件導向的思想的時候,都是使用c語言的結構體和函式指標來實現。當然,使用的編譯器自然就是gcc了。後來,慢慢的轉向了使用c 編寫...