linux下c程式的編譯可以分為四個步驟,分別是預處理,編譯,彙編和鏈結。
1.預編譯:
首先預處理完成預替換、去注釋、標頭檔案按照路徑展開、以及條件編譯。
建立乙個test.c檔案。裡面寫入注釋、巨集定義、標頭檔案、條件編譯。
如下圖:
使用的gcc命令是:gcc -e test.c -o test.i
gcc -e的作用是將.c檔案轉化成.i檔案
使用vi命令開啟test.i
此時我們發現巨集定義已被替換,處理所有條件預編譯指令,處理「#include」預編譯指令,注釋也已經被刪除。
2.編譯:
把預處理完的檔案進行一系列詞法分析,語法分析,語義分析及生成相應的彙編**。
使用的gcc命令是:gcc –s tets.i -o test.s
gcc -s的作用是將.i檔案轉化成.s檔案
開啟test.s檔案
此時我們發現,編譯已經把c語言轉化為組合語言了。
3.彙編:
將彙編**轉變成機器可執行的指令。
使用的gcc命令是:gcc –c test.s -o test.o
gcc -s的作用是將.s檔案轉化成.o檔案
開啟test.o檔案
通過上圖,我們可以發現彙編實際上指把組合語言**翻譯成目標機器指令的過程。
目標檔案中所存放的也就是與源程式等效的目標的機器語言**。
匯程式設計序生成的目標檔案實際上是可重定位檔案,它其中包含有適合於其它目標檔案鏈結來建立乙個可執行的或者共享的目標檔案的**和資料。
4.鏈結:
生成exe可執行程式。
使用的gcc命令是:gcc test.o -o test
這樣可以得到計算機能讀懂的二進位制檔案
開啟test檔案
Linux下程式編譯鏈結過程
在linux下使用gcc將原始碼 c檔案 編譯成可執行檔案的過程可以分解為4個步驟,分別是預處理 prepressing 編譯 compilation 彙編 assembly 鏈結 linking i命令 gcc e hello.c o hello.i e 可以使編譯器在預處理完成後就停止編譯 o ...
Linux下程式的編譯鏈結及裝載(解釋)執行
1.ubuntu下helloword編譯連線過程分析 c編譯原理 ubuntu下helloword編譯連線過程分析 2.ubuntu下helloworld程式載入執行分析 c編譯原理 ubuntu下helloworld程式載入執行分析 linux程式執行跟蹤 3.共享庫的靜態鏈結相關 android...
Linux下C 程式鏈結boost庫
廢話不說,入正題。我使用eclipse來開發c 1 編譯好boost,編譯方法boost目錄下有。假設庫檔案在 usr local lib下 2 eclipse中在工程中右鍵,選屬性 c c build setting gcc c linker。如果使用靜態鏈結,miscellaneous中增加ot...