在多道程式的實現中,要想使原始檔生成可執行檔案通常需要兩個步驟編譯和鏈結,
其中編譯是指將原始檔編譯為中間**檔案,在linux中為*.o檔案,其實質就是由c或c++等高階語言生成組合語言。
生成可執行檔案,
我們以編譯c/c++為例,在windows中編譯生成的為.obj檔案,在linux/unix中生成.o檔案,在編譯的過程中主要是檢測語法是否正確,變數和函式是否宣告。當然對於extern宣告的變數和函式(定義在別的編譯檔案中)會首先建立乙個為解決符號表,同時函式中宣告的全域性變數也會放在乙個解決符號表中。這兩個符號表留給鏈結的時候去處理。每個原始檔生成對應的乙個.o檔案。
當在鏈結的過程中時將所有的中間**檔案相互鏈結自己需要的函式和全域性變數,這些函式可以**於其它目標檔案,也可以來自庫檔案。鏈結的過程實質就是為所有的中間**檔案進行統一的編址,例如在a原始檔中呼叫了b檔案中的方法,鏈結過程中就會找到b中方法的具體位置,並將該位址賦給a的呼叫函式,將a和b放在統一的虛擬位址空間中。
編譯和鏈結
一般來說,無論是c c 首先要把原始檔編譯成中間 檔案,在windows下也就是 obj 檔案,unix下是 o 檔案,即 object file,這個動作叫做編譯 compile 然後再把大量的object file合成執行檔案,這個動作叫作鏈結 link 編譯時,編譯器需要的是語法的正確,函式與...
編譯和鏈結
平時,我們口頭上並不嚴格區分 編譯 compile 與 鏈結 link 這兩個專業術語。例如我們總是說 把那個 c檔案編譯成可執行檔案 寫成命令就是 gcc example.c 這個命令馬上給我們產生乙個 a.out 如果程式沒有錯誤的話 實際上,整個工作至少要分成四個階段,分別由不同的程式完成 第...
編譯和鏈結
編譯和鏈結 1 編譯 由編譯程式將使用者的源 編譯成若干個目標模組。3 載入 由引導程式將載入模組載入記憶體。編譯和鏈結都是為將使用者程式從硬碟上調入記憶體並將其轉換為可執行程式服務的。用編譯器時的compile就是在進行編譯,link就是鏈結,執行程式時可以看到。編譯可以理解為高階語言翻譯為計算機...