源代碼生成可執(zhí)行程序過(guò)程(編程程序直接生成可執(zhí)行文件)
本篇文章給大家談?wù)勗创a生成可執(zhí)行程序過(guò)程,以及編程程序直接生成可執(zhí)行文件對(duì)應(yīng)的知識(shí)點(diǎn),希望對(duì)各位有所幫助,不要忘了收藏本站喔。
本文目錄一覽:
- 1、把高級(jí)語(yǔ)言編寫(xiě)的源程序轉(zhuǎn)換為可執(zhí)行程序的過(guò)程叫什么?
- 2、C語(yǔ)言源程序到運(yùn)行程序經(jīng)過(guò)哪幾個(gè)步驟
- 3、一個(gè)源程序(.c)變成可執(zhí)行(.exe)文件要經(jīng)過(guò)幾個(gè)步驟?詳細(xì)一點(diǎn)
把高級(jí)語(yǔ)言編寫(xiě)的源程序轉(zhuǎn)換為可執(zhí)行程序的過(guò)程叫什么?
高級(jí)語(yǔ)言轉(zhuǎn)換為可執(zhí)行程序的過(guò)程叫編譯,主要有以下幾個(gè)過(guò)程:
1、預(yù)編譯,處理頭文件及查錯(cuò)(語(yǔ)法錯(cuò)誤);
2、編譯,把預(yù)處理過(guò)的文件編譯成目標(biāo)代碼;
3、鏈接,把所有的目標(biāo)代碼鏈接成可執(zhí)行文件。
C語(yǔ)言源程序到運(yùn)行程序經(jīng)過(guò)哪幾個(gè)步驟
1、預(yù)處理
在這一階段,源碼中的所有預(yù)處理語(yǔ)句得到處理,例如:#include語(yǔ)句所包含的文件內(nèi)容替換掉語(yǔ)句本身,所有已定義的宏被展開(kāi)。
根據(jù)#ifdef,#if等語(yǔ)句的條件是否成立取舍相應(yīng)的部分,預(yù)處理之后源碼中不再包含任何預(yù)處理語(yǔ)句。
GCC預(yù)處理階段可以生成.i的文件,通過(guò)選項(xiàng)-E可以使編譯器在預(yù)處理結(jié)束時(shí)就停止編譯。例如:gcc -E -o hello.i hello.c
2、編譯
這一階段,編譯器對(duì)源碼進(jìn)行詞法分析、語(yǔ)法分析、優(yōu)化等操作,最后生成匯編代碼。這是整個(gè)過(guò)程中最重要的一步,因此也常把整個(gè)過(guò)程稱為編譯。
可以通過(guò)選項(xiàng)-S使GCC在進(jìn)行完編譯后停止,生成.s的匯編程序。例如:gcc -S -o hello.s hello.c
3、匯編
這一階段使用匯編器對(duì)匯編代碼進(jìn)行處理,生成機(jī)器語(yǔ)言代碼,保存在后綴為.o的目標(biāo)文件中。
當(dāng)程序由多個(gè)代碼文件構(gòu)成時(shí),每個(gè)文件都要先完成匯編工作,生成.o目標(biāo)文件后,才能進(jìn)入下一步的鏈接工作。
目標(biāo)文件已經(jīng)是最終程序的某一部分了,只是在鏈接之前還不能執(zhí)行??梢酝ㄟ^(guò)-c選項(xiàng)生成目標(biāo)文件:gcc -c -o hello.o hello.c
4、鏈接
經(jīng)過(guò)匯編以后的機(jī)器代碼還不能直接運(yùn)行。為了使操作系統(tǒng)能夠正確加載可執(zhí)行文件,文件中必須包含固定格式的信息頭,還必須與系統(tǒng)提供的啟動(dòng)代碼鏈接起來(lái)才能正常運(yùn)行,這些工作都是由鏈接器來(lái)完成的。gcc -o hello hello.c
5、運(yùn)行:執(zhí)行.EXE文件,得到運(yùn)行結(jié)果。
一個(gè)源程序(.c)變成可執(zhí)行(.exe)文件要經(jīng)過(guò)幾個(gè)步驟?詳細(xì)一點(diǎn)
以GCC編譯器為例,可以分為四步。
第一步是預(yù)處理,包括語(yǔ)法檢查等工作。
gcc
-P
abc.c
第二步由源程序生產(chǎn)匯編語(yǔ)言代碼。
gcc
-S
abc.c
會(huì)生成abc.s文件,這個(gè)文件里就是匯編代碼。
第三步編譯器生成目標(biāo)代碼,一個(gè)源文件生成一個(gè)目標(biāo)代碼。
gcc
-c
abc.c
會(huì)生成abc.o
第四步連接器從目標(biāo)代碼生成可執(zhí)行文件。
目標(biāo)代碼包括機(jī)器碼和符號(hào)表(函數(shù)及變量名)。連接器的主要作用是通過(guò)符號(hào)表在庫(kù)文件和其他模塊中找到在目標(biāo)代碼中引入或未定義的符號(hào)(函數(shù)及變量名),將幾個(gè)目標(biāo)代碼合成可執(zhí)行文件。
關(guān)于源代碼生成可執(zhí)行程序過(guò)程和編程程序直接生成可執(zhí)行文件的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。