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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

C语言——程序的编译+链接(linux+gcc实现过程)

發布時間:2025/3/21 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言——程序的编译+链接(linux+gcc实现过程) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 前言
  • 一、預處理
    • 1.預處理階段的操作:
    • 1.預處理過程實現:
  • 二、編譯
    • 1.編譯階段的操作:
    • 2.編譯過程的實現:
  • 三、匯編
    • 1.匯編階段的操作:
    • 2.匯編過程的實現:
  • 四、鏈接
    • 1.鏈接階段的操作:
    • 2.鏈接過程的實現:


前言

一個程序要運行,一定要經歷四個步驟。依次是: 預處理、編譯、匯編和鏈接。那么接下來就依次拆解這些過程來更好的理解程序是如何運行起來的。

首先簡述一下各步驟的內容:

  • 預處理:展開頭文件/宏替換/去掉注釋/條件編譯
  • 編譯 :檢查語法,生成匯編代碼
  • 匯編:把匯編代碼轉成二進制機器碼寫入目標文件
  • 鏈接:鏈接各模塊生成可執行程序

后面展開討論————


一、預處理

1.預處理階段的操作:

  • 展開所有的宏定義,將#define刪除
  • 刪除所有注釋
  • 保留所有的#pragma編譯指令,因為編譯器需要使用它們。
  • 處理條件編譯指令
  • 處理#include預編譯指令,將被包含的頭文件插到該編譯指令的位置
  • 添加行號和文件標識名
  • 1.預處理過程實現:

    可以使用linux來實現預處理到鏈接的過程并觀察

    gcc指令的用法

    -E選項:提示編譯器執行完預處理就停下來,后邊的編譯、匯編、鏈接就先不執行了。
    -S選項:提示編譯器執行完編譯就停下來,不去執行匯編和鏈接了。
    -c選項:提示編譯器執行完匯編就停下來。
    使用 gcc 命令不跟任何的選項的話,會默認執行預處理、編譯、匯編、鏈接這整個過程,如果程序沒有錯,就會得到一個可執行文件,默認為a.out,使用 -o + 文件名可定義生成可執行文件的名稱。

    一個簡單的代碼理解預處理


    首先,編輯一個test.c文件,里面有注釋,宏定義及預編譯指令等,執行gcc -E test.c -o test.i,生成一個test.i文件。

    觀察發現,文件變成了900行左右,宏定義已經被替換掉了,注釋等也已經刪除。上面的部分即stdio.h包含的代碼。

    二、編譯

    1.編譯階段的操作:

    編譯過程是整個程序構建的核心部分,編譯成功,會將源代碼由文本形式轉換成機器語言,編譯過程就是把預處理完的文件進行一系列詞法分析、語法分析、語義分析以及優化后生成相應的匯編代碼文件。

    2.編譯過程的實現:

    依然是上面的簡單代碼,針對生成的test.i文件執行gcc -S test.i -o test.s,生成一個test.s文件。

    觀察test.s文件,已經從之前的文本形式轉換成匯編代碼。

    三、匯編

    1.匯編階段的操作:

    匯編過程調用匯編器as來完成,是用于將匯編代碼轉換成機器可以執行的指令,每一個匯編語句幾乎都對應一條機器指令。

    2.匯編過程的實現:

    針對生成的test.s文件執行gcc -c test.s -o test.o,生成一個test.o文件。

    文件將變成這樣的只有機器才能看懂的語言啦。

    四、鏈接

    1.鏈接階段的操作:

    鏈接的主要內容就是將各個模塊之間相互引用的部分正確的銜接起來。它的工作就是把一些指令對其他符號地址的引用加以修正。鏈接過程主要包括了地址和空間分配、符號決議和重定向。

    2.鏈接過程的實現:

    使用gcc test.o -o test指令,生成一個test文件

    這就是鏈接后的文件,也是一個可執行程序,用./test執行

    可以看到最終得到了答案。

    總結

    以上是生活随笔為你收集整理的C语言——程序的编译+链接(linux+gcc实现过程)的全部內容,希望文章能夠幫你解決所遇到的問題。

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