一:建立main.c
首先在linux環境中使用命令vim main.c
寫乙個這樣的程式
#include//belongal
#define max 10
int g_val1 = 11;
int g_val2 = 0;
int g_val3 =;
static int g_val5 = 11;
static int g_val5 = 0;
static int g_val6;
int main()
二:編譯編譯分為預編譯,編譯,彙編
1:預編譯使用gcc main.c -e > main .i
,將main.c
預編譯成main.i
;再使用vim main.i
命令進入main.i
檔案內,如下圖
由上圖(main.i
)對比main.c
可以看出預編譯會進行以下工作
*對帶#的命令進行預處理
*引入標頭檔案(遞迴)
*注釋的替換(刪除)
2:編譯使用gcc main.i -s
將main.c編譯為main.s
;再使用vim main.s
進入main.s
檔案內,如下圖
由上圖可以看出編譯過程就是將預處理完的檔案進行詞法分析,語法分析,語義分析及優化後生成相應的彙編**檔案,且進行符號彙總
3:彙編使用命令gcc main.s -c
將main.s
彙編為main.o
;使用命令vim main.o
進入mian.o
檔案內,如下圖
由上圖可以看出main.o檔案內部全是機器指令;在這彙編中會形成符號表,將編譯過程中的符號彙總的符號整理成符號表
三:鏈結
使用命令
gcc main.o -o main
把main.o檔案鏈結成main(可執行檔案)
gcc main.o main -lm
把main.o檔案鏈結成main(可執行檔案)
gcc -o main.o test.o -o main
把main.o和test.o檔案鏈結成main(可執行檔案)
當然在main(可執行檔案)中儲存的是機器語言;在鏈結的過程主要包括位址和空間的分配,符號決議,重定位,鏈結所有機器碼步驟;
4 1程式編譯連線
儲存器管理 原因 容量雖不斷擴充,仍不能滿足現代軟體和使用者的需要,是一種寶貴 緊俏的資源 多層次處理,協調cpu與儲存裝置的速度差距 功能 重點是記憶體管理,對其有效的管理直接影響儲存器的利用率 系統效能。儲存器資源的分配和 位址變換 邏輯位址與實體地址的對應關係維護 儲存共享和保護 虛擬儲存的排...
程式的連線和編譯過程
連線 linking 是將各種 和資料片段收集並組合稱為乙個單一檔案的過程,這個檔案可被載入 複製 到記憶體並執行。在早期的計算機系統中,連線時手動執行的。在現代系統中,連線是由 叫做聯結器 linker 的程式自動執行的。main.c sum.c 大多數編譯系統提供編譯器驅動程式 compiler...
解析程式與編譯程式
所謂解釋程式是高階語言翻譯程式的一種,它將源語言 如basic 書寫的源程式作為輸入,解釋一句後就提交計算機執行一句,並不形成目標程式。就像外語翻譯中的 口譯 一樣,說一句翻一句,不產生全文的翻譯文字。這種工作方式非常適合於人通過終端裝置與計算機會話,如在終端上打一條命令或語句,解釋程式就立即將此語...