c語言實現從源文件從文本到可執行文件經歷的過程
源文件從文本到可執行文件經歷的過程
從 .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
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。