天天看點

.c檔案編譯過程(二進制可執行檔案生成過程以及連結器)

我們平時寫的.c檔案是如何編譯的呢。下圖很好的诠釋了這一過程

.c檔案編譯過程(二進制可執行檔案生成過程以及連結器)

主要有四個步驟

第一步預處理:使用預處理器(cpp)處理C語言檔案中的預處理指令。這時候C語言檔案還是一個.c檔案.

第二部編譯:使用C編譯器gcc,将C語言源碼檔案編譯成彙編檔案file.s。

第三步彙編:使用彙編器as将彙編代碼彙編成二進制的.o檔案(又稱目标檔案)。

第四步連結:最後使用連結器ld将目标檔案和目标檔案中用到的一些庫檔案進行連結生成linux下elf格式的可執行檔案,這個可執行檔案才可以在linux平台下面運作。

下面是目标檔案的連結過程

首選介紹下目标檔案的構成:

.c檔案編譯過程(二進制可執行檔案生成過程以及連結器)

每一個目标檔案都由這三段組成

.c檔案編譯過程(二進制可執行檔案生成過程以及連結器)

關于連結器簡單講就是一個組裝器,它的作用是将目标檔案(零件)組合成可執行檔案(一台機器),連結腳本檔案(安裝圖紙)的作用是決定目标檔案中的某個段放在可執行檔案中的位置。圖中file就是可執行檔案。

連結腳本檔案:

.c檔案編譯過程(二進制可執行檔案生成過程以及連結器)

注意這條指令:arm-linux-ld -o hello hello.o main.o -T hello.lds

ld是連結器,将多個目标檔案(hello.o和main.o)連結生成一個可執行檔案

(hello),通過-T指定連結腳本檔案

繼續閱讀