1. 程式人生 > >可執行檔案的生成

可執行檔案的生成

菜雞剛學,寫下筆記方便複習。

一個程式的轉化處理過程可以如下表示:

.c字尾的原始檔 (經過預處理)-> 變成 .i 字尾的源程式 (經過編譯)-> .s字尾的組合語言程式檔案 (經過彙編後)-> .o字尾的可重定位目標程式 (經過連結)-> 可執行檔案

以c ,i , s結尾的檔案都是可讀的文字檔案。
.o結尾和可執行檔案都是二進位制檔案。

預處理
處理原始檔中以 “#” 開頭的預編譯指令,經過預編譯處理後,得到的是以 .i 結尾的預處理檔案,他沒有了巨集定義,仍是一個可讀的文字檔案,本質上還是C語言的程式碼。
編譯
編譯就是將預處理生成的 .i 檔案 翻譯成 組合語言程式碼,該過程就是compile,編譯後的檔案內容,本質上是組合語言程式程式碼。
彙編


經過編譯後的檔案,本質是組合語言程式碼,還是可讀的文字檔案,但是cpu看不懂他,還需要將他翻譯成cpu能讀懂的二進位制檔案,將彙編指令一一對應,轉化為機器指令序列。
連結
連結過程是將多個 .o 檔案(可重定向目標程式)合併在一起, 生成可執行檔案,這是因為主函式裡呼叫了一些標準庫裡的寫好的函式,需要將他們的.o檔案合併在一起才能生成可執行檔案。