国产宅男网站在线|亚洲A级性爱免费视频|亚洲中精品级在线|午夜福利AA毛

  • <dd id="gf5jf"><th id="gf5jf"></th></dd>

    <cite id="gf5jf"><label id="gf5jf"></label></cite>
  • <div id="gf5jf"><listing id="gf5jf"></listing></div>
    學(xué)習(xí)啦 > 學(xué)習(xí)電腦 > 電腦安全 > 系統(tǒng)安全 > gcc如何編譯C語(yǔ)言程序

    gcc如何編譯C語(yǔ)言程序

    時(shí)間: 林澤1002 分享

    gcc如何編譯C語(yǔ)言程序

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

      gcc編譯C語(yǔ)言程序的方法

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

      [root@wahoo test]# vim hello.c

      #include

      #define DISPLAY "hello c!"

      int main(void)

      {

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

      return 0;

      }

      ZZ(說(shuō)明:ZZ當(dāng)前文件進(jìn)行快速保存操作)

      預(yù)編譯(Preprocessing)

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

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

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

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

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

      編譯(Compilation)

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

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

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

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

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

      匯編(Assembly)

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

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

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

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

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

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

      鏈接(Linking/Build)

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

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

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

      我們也可以對(duì)這個(gè)文件進(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程序的主要過(guò)程包括 預(yù)編譯->編譯->匯編->連接 四個(gè)過(guò)程,每個(gè)過(guò)程都分別進(jìn)行不同的處理,了解了這其中的一些原理,對(duì)c編程的理解大有益處


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

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

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

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

    4.什么是gcc gcc的用法

    5.Linux GCC命令的詳解

    6.c語(yǔ)言學(xué)習(xí)需要的時(shí)長(zhǎng)以及方法

    3450180