首頁 > 軟體

c語言實現從原始檔從文字到可執行檔案經歷的過程

2022-07-25 10:00:48

原始檔從文字到可執行檔案經歷的過程

從 .c檔案到 .exe檔案

gcc hello.c -o hello.exe

原始檔( -E)  預處理檔案 (-S) 組合檔案 (-c) 目標檔案 ( 無)可執行檔案

hello.c--預處理--hello.i--編譯--hello.s---組合--hello.o--連結--hello.exe

預處理

gcc -E hello.c -o hello.i

1.標頭檔案展開 —不檢查語法錯誤,可以展開任意檔案

2.宏定義—將宏名替換為宏值,不檢查語法錯誤

3.替換註釋—變成空行

4.展開條件編譯—根據條件來展開指令

編譯

gcc -S hello.i -o hello.s

1.將c程式翻譯為組合指令

2.逐行檢查語法錯誤–整個編譯4步中最耗時間的過程

組合

gcc -c hello.s -o hello.o

1.將組合指令翻譯成對應的二進位制編碼

連結

gcc hello.o -o hello.exe

1.資料段合併

2.資料地址回填

3.庫引入

暫存器、快取、記憶體三者關係

cpu計算時,先預先把要用的資料從硬碟督導記憶體,然後再把即將要用的資料讀到暫存器中。快取能夠提高資料的讀取速度。

整合式開發環境 IDE

用於提供程式開發的應用程式,一般包括編輯器、編譯器、偵錯程式和使用者介面工具。

源程式如何到可執行程式

源程式(原始碼)是指按照一定的程式設計語言規範編寫的未經過編譯的文字檔案,是具有可讀性的計算機語言指令。可以比作自己手寫的程式程式碼。

可執行程式(Executable Program,EXE file)是可以在作業系統儲存空間中浮動定位的二進位制可執行程式。一般軟體安裝後會生成可執行檔案,可以直接載入到記憶體中,並又作業系統載入並執行。

以 C 語言為例,自己編寫的原始碼副檔名為 c,這個 c 檔案就是原始檔。

從原始檔到可執行檔案一般需要經過幾個步驟:預處理->編譯->組合->連結這四個過程。

  • 預處理:預處理相當於根據預處理命令將原始碼轉換為新的 c 程式,不過通常以 i 為擴充套件名。
  • 編譯:將得到的 i 檔案翻譯成組合程式碼,通常以 s 為擴充套件名。
  • 組合:將組合檔案翻譯為機器指令,並打包成可重定位目標程式的 o 檔案。
  • 連結:將參照的其它 o 檔案加到組合後的 o 檔案中,處理後得到最終的可執行檔案。

這裡首先在 linux 作業系統中編寫原始碼,並命名為 hello.c,內容如下:

#include <stdio.h>
int main()
{
    printf("Hello world!n");
    return 0;
}

一個很簡單的原始碼,但是這樣的原始碼如果不是在整合式開發環境(Integrated Development Environment,IDE)中是不能夠直接點選執行的,需要經過一系列的操作,具體為:

# 預處理
gcc -E hello.c -o hello.i
# 編譯
gcc -S hello.i -o hello.s
# 組合
gcc -c hello.s -o hello.o
# 連結
gcc hello.o -o hello

經過以下操作後,就能夠發現在 hello.c 檔案同級目錄中出現了檔案 hello.i,hello.s,hello.o,hello。可知檔案 hello 即為可執行程式,我們在終端中輸入下方的指令,就能夠看到最後的輸出結果。

./hello

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com