C語言編譯和連結過程簡介

華哥-2088發表於2018-05-27

C語言編譯和連結過程簡介

一、編譯過程簡介

        編譯過程可以分為4部分內容組成

        前處理器->編譯器->彙編器->連結器

       1、前處理器

            (1)、處理所有的註釋,以空格代替

            (2)、講所有的#define刪除,並且展開所有的巨集定義

            (3)、處理條件編譯指令#if,#ifdef、#elif,#else、#endif

            (4)、處理#include,展開檔案包含

            (5)、保留編譯器需要使用#pragma指令

           預處理指令示例:

            gcc -E file.c -o file.i

       2、編譯器

           (1)、對預處理檔案進行語法分析、詞法分析、語義分析

                   語法分析:分析表示式是否遵循語法規則

                   詞法分析:分析關鍵字,識別符號,立即數是否合法

                   語義分析:在語法分析基礎上進一步分析表示式是否合法

            (2)、分析結束後進行程式碼優化生成相應的彙編程式碼檔案

            編譯指令示例:

            gcc -S file.i -o file.s

        3、彙編器

             (1)、彙編器將彙編程式碼轉變為機器可以執行的指令,也就是機器指令

             (2)、每條彙編指令幾乎都對應一條機器指令

             彙編指令示例:

             gcc - c file.s -o file.o

二、連結過程簡介

        連結是指將目標檔案最終生成可執行檔案

       根據連結方式的不同,連結過程可以分為:

             1、靜態連結:目標檔案直接進入可執行檔案

             2、動態連結:在程式啟動後才動態載入目標檔案

        連結器的意思:連結器的主要作用是把各個模組之間相互引用部分處理好,使得各個模組之間能夠正確的連結

        


       1、靜態連結:  由連結器在連結時將庫的內容直接加入到可執行程式中

     

      2、動態連結:

              (1)、可執行程式在執行時才動態載入庫進行連線

              (2)、庫的內容不會進入可執行程式                        


參考資料“狄泰軟體C語言進階教程”


相關文章