Linux下將源文件編譯成目標(biāo)文件的過程解析
簡介
請講一下linux如何源文件逐步編譯成可執(zhí)行文件。
解答
首先先上圖對編譯的整個過程有個感性的認(rèn)識,然后再逐步分析各個過程。
以hello.c 程序為例
# include <stdio.h> main{ printf("hello\n"); }
一個.c源程序需要經(jīng)過預(yù)處理器生成.i文件,再經(jīng)過編譯器生成.s文件,再經(jīng)過匯編器生成可重定位目標(biāo)文件.o文件,再與其他.o文件經(jīng)過鏈接器生成最終的可執(zhí)行目標(biāo)程序。
預(yù)處理階段。主要是處理源文件中以“#”開頭的預(yù)編譯指令。
刪除#define并展開宏
處理所有條件預(yù)編譯指令,如#if, #ifdef, #endif
插入頭文件到“#include”處
刪除所有注釋
添加行號和文件名標(biāo)識,以便編譯時編譯器產(chǎn)生調(diào)試用的行號信息
保留所有#pragma編譯指令。
編譯階段。將預(yù)處理得到的預(yù)處理文件進(jìn)行語法分析,詞法分析,語義分析,優(yōu)化后,生成匯編代碼文件(匯編語言源程序)。
匯編階段。利用匯編程序(匯編器)將匯編語言源程序轉(zhuǎn)換成機(jī)器指令序列(機(jī)器語言程序)。
鏈接階段。將多個可重定位的目標(biāo)文件.o合并以生成可執(zhí)行文件,其可以被加載到內(nèi)存中,由系統(tǒng)執(zhí)行。
總結(jié)
以上就是本文關(guān)于Linux下將源文件編譯成目標(biāo)文件的過程解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
apache設(shè)置自動將http跳轉(zhuǎn)到https的方法
客戶中心啟用了https的ssl證書,現(xiàn)在需要將原先的http直接跳轉(zhuǎn)到https上。這里為大家提供一個我經(jīng)常使用到的方法,即使用偽靜態(tài)功能2013-02-02阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤圖文教程
這篇文章主要介紹了阿里云云服務(wù)器Linux系統(tǒng)掛載數(shù)據(jù)盤圖文教程,阿里云服務(wù)器一般需要購買額外的數(shù)據(jù)盤,本文就講解如何掛載使用額外的數(shù)據(jù)盤,需要的朋友可以參考下2014-09-09vmware中CentOS7網(wǎng)絡(luò)設(shè)置教程詳解
這篇文章主要為大家詳細(xì)介紹了vmware中CentOS7網(wǎng)絡(luò)設(shè)置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07