一惭适、編譯和鏈接
1狈究、構(gòu)建:IDE一般都將編譯和鏈接的過程一步完成,通常將這種編譯和鏈接合并到一起的過程稱為構(gòu)建掩完;
2、程序從源代碼到最終可執(zhí)行文件一般分為4個(gè)步驟:預(yù)處理(processing)积暖、編譯(compilation)藤为、匯編(assembly)、鏈接(linking)夺刑;
1)預(yù)編譯:編譯器將源代碼文件和相關(guān)頭文件編譯成一個(gè).i文件;
預(yù)編譯過程主要處理那些源代碼文件中以#開始的預(yù)編譯指令分别。如“#include”遍愿,“define”,主要處理規(guī)則如下:
a耘斩、將所有的“#define”刪除沼填,并且展開所有的宏定義;
b括授、處理所有條件預(yù)編譯指令坞笙,將被包含的文件插入到該預(yù)編譯指令的位置岩饼;
c、刪除所有的“//”和"/* */”薛夜;
d籍茧、添加行號(hào)和文件名標(biāo)識(shí);
e梯澜、保留所有的#progma編譯器指令寞冯,因?yàn)榫幾g器需要使用它們;
2)編譯:編譯過程就是把預(yù)處理完的文件進(jìn)行一系列的詞法分析晚伙、語法分析吮龄、語義分析及優(yōu)化后生成相應(yīng)的匯編代碼文件,這個(gè)部分是整個(gè)程序構(gòu)建的核心部分咆疗;
3)匯編:匯編就是匯編器將匯編代碼轉(zhuǎn)變成機(jī)器可執(zhí)行的指令漓帚,每一個(gè)匯編語句幾乎都對(duì)應(yīng)一條機(jī)器指令;經(jīng)過預(yù)編譯午磁、編譯和匯編輸入目標(biāo)文件胰默;
4)鏈接:輸出可執(zhí)行文件;
編譯過程一般分為6步:掃描漓踢、語法分析牵署、語義分析、源代碼優(yōu)化喧半、代碼生成和目標(biāo)代碼優(yōu)化奴迅;
鏈接過程主要包括了地址和空間分配、符號(hào)決議和重定位挺据;
最基本的靜態(tài)鏈接過程:每個(gè)模塊的源代碼文件經(jīng)過編譯器編譯成目標(biāo)文件取具,目標(biāo)文件和庫(Library)一起鏈接形成最終可執(zhí)行文件。而最常見的庫就是運(yùn)行時(shí)庫(Runtime Librayr)扁耐,他是支撐程序運(yùn)行的基本函數(shù)的集合暇检,庫其實(shí)是一組目標(biāo)文件的包,就是一些最常用的代碼編譯成目標(biāo)文件后打包存放婉称;