程式編譯和連線的過程如下所示:
編譯器的工作包括:預編譯、編譯、彙編
預編譯:
•處理所有的注釋,以空格代替
•將所有的#define刪除,並且展開所有的巨集定義
•處理條件編譯指令#if, #ifdef, #elif, #else, #endif
•處理#include,展開被包含的檔案
•保留編譯器需要使用的#pragma指令
編譯預處理指令:
gcc –e file.c –o hello.i
編譯:
•對預處理檔案進行一系列詞法分析,語法分析和語義分析
•詞法分析主要分析關鍵字,標示符,立即數等是否合法
•語法分析主要分析表示式是否遵循語法規則
•語義分析在語法分析的基礎上進一步分析表示式是否合法
•分析結束後進行**優化生成相應的彙編**檔案
編譯指令:
gcc –s file.c –o hello.s
彙編:
•彙編器將彙編**轉變為機器可以執行的指令
•每個彙編語句幾乎都對應一條機器指令
彙編指令:
gcc –c file.s –o hello.o
連線:
聯結器的工作:連線
聯結器的主要作用是把各個模組之間相互引用的部分處理好,使得各個模組之間能夠正確的銜接。最後得到可執行的程式。連線又分為動態連線和靜態連線。
小結:
編譯過程簡介
被隱藏的過程 預編譯 處理所有的注釋,以空格代替 將所有的 define刪除刪除 並且展開所有的巨集定義 處理條件編譯指令 if,ifdef,elif,else,endif 處理 include 展開被包含的檔案 保留編譯器需要使用的 pragma指令指令 預處理指令 編譯 對預處理檔案進行一系列詞...
c 編譯過程簡介
編譯過程簡介 目標檔案 編譯後生成的檔案,以機器碼的形式包含了編譯單元裡所有的函式和資料 匯出符號表 未解決符號表 位址重定向表等 第二種是動態鏈結程式 動態庫 將它與另乙個可 執行檔案及其它的共享目標檔案結合到一起,建立乙個程序映象 可執行檔案 o檔案在編譯後就能獲得,但是庫檔案 可執行檔案都需要...
gcc簡介及編譯過程
1 編譯器 gcc 簡介 linux系統下的 gcc gnu c compiler 是gnu推出的功能強大 效能優越的多 平台編譯器,它是gnu的代表作品之一,gcc是可以在多種硬體平台上編譯出可 執行檔案的超級編譯器,其執行效率比一般的編譯器要高出20 30 編譯器能 將c c 語言源程式 組合語...