學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 系統(tǒng)安全 > gcc如何編譯C語言程序

gcc如何編譯C語言程序

時間: 林澤1002 分享

gcc如何編譯C語言程序

  gcc編譯C語言程序的方法是什么,那么gcc如何編譯C語言程序的呢/下面是學(xué)習(xí)啦小編收集整理的gcc如何編譯C語言程序,希望對大家有幫助~~

  gcc編譯C語言程序的方法

  編寫c代碼,并輸入以下代碼,生成文件hello.c

  [root@wahoo test]# vim hello.c

  #include

  #define DISPLAY "hello c!"

  int main(void)

  {

  printf("%s\n", DISPLAY );

  return 0;

  }

  ZZ(說明:ZZ當前文件進行快速保存操作)

  預(yù)編譯(Preprocessing)

  會對各種預(yù)處理指令(#include #define #ifdef 等#開始的代碼行)進行處理,刪除注釋和多余的空白字符,生成一份新的代碼

  [root@wahoo test]#gcc -E hello.c -o hello.i

  E 參數(shù) 通知gcc對目標文件進行預(yù)編譯,這里是對文件hello.c文件

  o 參數(shù) 是對命令輸出結(jié)果進行導(dǎo)入操作,這里是把 gcc -E hello.c 操作結(jié)果輸出到文件hello.i(命名要自定義)中進行保存

  這個命令執(zhí)行完后我們目錄下多了一個文件hello.i,你可以查閱一下文件的內(nèi)容。

  編譯(Compilation)

  對代碼進行語法、語義分析和錯誤判斷,生成匯編代碼文件

  [root@wahoo test]#gcc -S hello.i -o hello.s

  S 參數(shù) 通知gcc對目標文件進行編譯,這里是對文件hello.i文件

  通過這一步我們知道 C語言跟匯編的 關(guān)系,至于他們之前是如何進行轉(zhuǎn)換的,大家可以進行更深入的學(xué)習(xí)與探討。

  此時目錄下多了一個hello.s文件,內(nèi)容如圖

  匯編(Assembly)

  把匯編代碼轉(zhuǎn)換與計算機可認識的二進制文件,要知道計算機只認識0和1呢

  [root@wahoo test]#gcc -c hello.s -o hello.o

  c 參數(shù) 通知gcc對目標文件執(zhí)行指令轉(zhuǎn)換操作

  此步驟我們得到文件hello.o

  大家也同樣打開文件查看一下,這個文件里面幾乎沒幾個字符大家能看懂,這就對了,但大家可以通過這種方法將其轉(zhuǎn)化為我們可讀的形式:

  [root@wahoo test]#readelf -a hello.o

  鏈接(Linking/Build)

  通俗的講就是把多個*.o文件合并成一個可執(zhí)行文件,二進制指令文件

  [root@wahoo test]#gcc hello.o -o hello

  這里我們就得到了一個可以直接在系統(tǒng)下執(zhí)行的文件 hello

  我們也可以對這個文件進行readelf操作,也可以進行二進制指令轉(zhuǎn)匯編的操作

  [root@wahoo test]#objdump -d hello

  程序運行

  [root@wahoo test]#./hello

  hello c!

  總結(jié):gcc 編譯c程序的主要過程包括 預(yù)編譯->編譯->匯編->連接 四個過程,每個過程都分別進行不同的處理,了解了這其中的一些原理,對c編程的理解大有益處


gcc如何編譯C語言程序相關(guān)文章:

1.Linux下C語言編程基礎(chǔ)知識

2.Mac系統(tǒng)怎樣使用終端編寫c語言程序

3.在Linux下編譯C或C++程序的教程

4.什么是gcc gcc的用法

5.Linux GCC命令的詳解

6.c語言學(xué)習(xí)需要的時長以及方法

3450180