日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

gcc执行过程

發布時間:2025/3/15 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gcc执行过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

執行過程編輯

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

7執行過程示例編輯

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

總結

以上是生活随笔為你收集整理的gcc执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。