Linux下將原始檔編譯成目標檔案的過程解析

2022-05-28 01:51:14 字數 555 閱讀 4159

乙個.c源程式需要經過預處理器生成.i檔案,再經過編譯器生成.s檔案,再經過彙編器生成可重定位目標檔案.o檔案,再與其他.o檔案經過鏈結器生成最終的可執行目標程式。

預處理階段

主要是處理原始檔中以「#」開頭的預編譯指令。

刪除#define並展開巨集

處理所有條件預編譯指令,如#if, #ifdef, #endif

插入標頭檔案到「#include」處

刪除所有注釋

新增行號和檔名標識,以便編譯時編譯器產生除錯用的行號資訊

保留所有#pragma編譯指令。

編譯階段

將預處理得到的預處理檔案進行語法分析,詞法分析,語義分析,優化後,生成彙編**檔案(組合語言源程式)。

彙編階段

利用匯程式設計序(彙編器)將組合語言源程式轉換成機器指令序列(機器語言程式)。

鏈結階段

將多個可重定位的目標檔案.o合併以生成可執行檔案,其可以被載入到記憶體中,由系統執行。

Linux下將原始檔編譯成目標檔案的過程解析

請講一下linux如何原始檔逐步編譯成可執行檔案。首先先上圖對編譯的整個過程有個感性的認識,然後再逐步分析各個過程。以hello.c 程式為例 include main 乙個.c源程式需要經過預處程式設計客棧理器生成.i檔案,再經過編譯器生成.s檔案,再經過彙編器生成可重定位目標檔案.o檔案,再與其...

Linux下如何將原始檔逐步編譯成目標檔案的過程

請講一下linux如何原始檔逐步編譯成可執行檔案。首先先上圖對編譯的整個過程有個感性的認識,然後再逐步分析各個過程。以hello.c 程式為例 乙個.c源程式需要經過預處理器生成.i檔案,再經過編譯器生成.s檔案,再經過彙編器生成可重定位目標檔案.o檔案,再與其他.o檔案經過鏈結器生成最終的可執行目...

將多個原始檔編譯成乙個ko

有三個檔案,分別是proc rw.c test.c和test.h,現在把這三個檔案編譯成proc.ko 1 proc rw.c include include include include copy to from user include test.h 在str中儲存使用者態write到檔案的字...