程式的翻譯簡單來說就是將原始檔轉換成可執行程式。
下面有一張圖可以形象的說明這個過程
從上圖可以看出,原始檔是通過編譯器先轉換成目標檔案,目標檔案再通過鏈結器轉換成可執行程式。
那麼程式的翻譯具體分為那幾步呢?
大的來說程式的翻譯過程分為兩步,分別是編譯和鏈結,而編譯又可以分為三步:1.預處理 2.編譯 3.彙編
預處理(-e):預處理也包括四個步驟 標頭檔案展開 巨集替換 去注釋 條件編譯
編譯(-s):預處理完之後停下來。
彙編(-c): 將組合語言變成二進位制目標檔案
說的再多不如來張圖看的清楚:
file 進行編譯的原始檔
line 檔案當前的行號
date 檔案被編譯的日期
time 檔案被編譯的時間
stdc 如果編譯器遵循ansi c,其值為1,否則未定義
在linux中 .代表當前目錄
… 代表上級目錄
define(巨集)
注意:定義巨集時後面不能加分號
巨集不僅可以進行簡單的變數替換還可以進行引數替換
巨集替換是由內而外的
巨集只是簡單的文字替換和函式是由本質的區別,不能當作函式來使用
程式的裝入和鏈結
編譯 鏈結 裝入 編譯 預處理 編譯 優化 彙編 靜態鏈結 動態鏈結 1 靜態鏈結 2 裝入時動態鏈結 3 執行時動態鏈結 裝入 靜態裝入 動態裝入 1 絕對裝入方式 這種方式在編譯的時候就會產生絕對位址 程式中的邏輯位址就是實際的實體地址 在裝入的時候不需要對位址和資料進行修改。缺點 只能將目標模...
程式的編譯和鏈結
一般來說,無論是c c 還是pas,首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的 object file合成執行檔案,這個動作叫作鏈結 link 編譯時,編譯器需要的是語法...
程式的裝入和鏈結
注 這是本人學習湯小丹等編寫的計算機作業系統 西安電子科技大學出版社 的學習筆記,因此許多引用 於此書,在正文中就不註明了!程式在執行前需要經過以下步驟 編譯程式對源程式進行編譯生成目標程式.obj 鏈結程式將目標程式和需要的庫檔案鏈結在一起形成可執行程式.exe,即乙個完整的裝入模組 裝入程式將裝...