您好,登錄后才能下訂單哦!
請講一下linux如何源文件逐步編譯成可執(zhí)行文件。
首先先上圖對編譯的整個過程有個感性的認識,然后再逐步分析各個過程。
以hello.c 程序為例
# include <stdio.h> main{ printf("hello\n"); }
一個.c源程序需要經過預處理器生成.i文件,再經過編譯器生成.s文件,再經過匯編器生成可重定位目標文件.o文件,再與其他.o文件經過鏈接器生成最終的可執(zhí)行目標程序。
預處理階段。主要是處理源文件中以“#”開頭的預編譯指令。
刪除#define并展開宏
處理所有條件預編譯指令,如#if, #ifdef, #endif
插入頭文件到“#include”處
刪除所有注釋
添加行號和文件名標識,以便編譯時編譯器產生調試用的行號信息
保留所有#pragma編譯指令。
編譯階段。將預處理得到的預處理文件進行語法分析,詞法分析,語義分析,優(yōu)化后,生成匯編代碼文件(匯編語言源程序)。
匯編階段。利用匯編程序(匯編器)將匯編語言源程序轉換成機器指令序列(機器語言程序)。
鏈接階段。將多個可重定位的目標文件.o合并以生成可執(zhí)行文件,其可以被加載到內存中,由系統(tǒng)執(zhí)行。
以上就是本文關于Linux下將源文件編譯成目標文件的過程解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。