日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

gcc执行过程

發(fā)布時(shí)間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc执行过程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

執(zhí)行過(guò)程編輯

雖然我們稱GCC是C語(yǔ)言的編譯器,但使用gcc由C語(yǔ)言源代碼文件生成可執(zhí)行文件的過(guò)程不僅僅是編譯的過(guò)程,而是要經(jīng)歷四個(gè)相互關(guān)聯(lián)的步驟∶預(yù)處理(也稱預(yù)編譯,Preprocessing)、編譯(Compilation)、匯編(Assembly)和連接(Linking)。 命令gcc首先調(diào)用cpp進(jìn)行預(yù)處理,在預(yù)處理過(guò)程中,對(duì)源代碼文件中的文件包含(include)、預(yù)編譯語(yǔ)句(如宏定義define等)進(jìn)行分析。接著調(diào)用cc1進(jìn)行編譯,這個(gè)階段根據(jù)輸入文件生成以.o為后綴的目標(biāo)文件。匯編過(guò)程是針對(duì)匯編語(yǔ)言的步驟,調(diào)用as進(jìn)行工作,一般來(lái)講,.S為后綴的匯編語(yǔ)言源代碼文件和匯編、.s為后綴的匯編語(yǔ)言文件經(jīng)過(guò)預(yù)編譯和匯編之后都生成以.o為后綴的目標(biāo)文件。當(dāng)所有的目標(biāo)文件都生成之后,gcc就調(diào)用ld來(lái)完成最后的關(guān)鍵性工作,這個(gè)階段就是連接。在連接階段,所有的目標(biāo)文件被安排在可執(zhí)行程序中的恰當(dāng)?shù)奈恢?#xff0c;同時(shí),該程序所調(diào)用到的庫(kù)函數(shù)也從各自所在的檔案庫(kù)中連到合適的地方。

7執(zhí)行過(guò)程示例編輯

  • 示例代碼
1 2 3 4 5 6 7 #include<stdio.h> int?main(void) { ????printf("hello\n"); ????return?0; }
  • 預(yù)編譯過(guò)程
這個(gè)過(guò)程處理宏定義和include,并做語(yǔ)法檢查。 可以看到預(yù)編譯后,代碼從6行擴(kuò)展到了910行。
1 2 3 4 5 gcc?-E?a.c?-o?a.i cat?a.c|wc?-l 5 cat?a.i|wc?-l 910
  • 編譯過(guò)程
這個(gè)階段,生成匯編代碼。
1 2 3 gcc?-S?a.i?-o?a.s cat?a.s|wc-l 59
  • 匯編過(guò)程
這個(gè)階段,生成目標(biāo)代碼。 此過(guò)程生成ELF格式的目標(biāo)代碼。
1 2 3 gcc?-c?a.s?-o?a.o file?a.o a.o:ELF64-bitLSBrelocatable,AMDx86-64,version1(SYSV),notstripped
  • 鏈接過(guò)程
鏈接過(guò)程。生成可執(zhí)行代碼。鏈接分為兩種,一種是靜態(tài)鏈接,另外一種是動(dòng)態(tài)鏈接。使用靜態(tài)鏈接的好處是,依賴的動(dòng)態(tài)鏈接庫(kù)較少,對(duì)動(dòng)態(tài)鏈接庫(kù)的版本不會(huì)很敏感,具有較好的兼容性;缺點(diǎn)是生成的程序比較大。使用動(dòng)態(tài)鏈接的好處是,生成的程序比較小,占用較少的內(nèi)存。
1 gcc?a.o?-o?a
程序運(yùn)行:
1 2 ./a hello

總結(jié)

以上是生活随笔為你收集整理的gcc执行过程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。