不卡AV在线|网页在线观看无码高清|亚洲国产亚洲国产|国产伦精品一区二区三区免费视频

學(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當(dāng)前文件進(jìn)行快速保存操作)

  預(yù)編譯(Preprocessing)

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

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

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

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

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

  編譯(Compilation)

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

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

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

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

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

  匯編(Assembly)

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

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

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

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

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

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

  鏈接(Linking/Build)

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

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

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

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

  [root@wahoo test]#objdump -d hello

  程序運(yùn)行

  [root@wahoo test]#./hello

  hello c!

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