新聞中心
linux 現(xiàn)在在開(kāi)發(fā)PC軟件、嵌入式開(kāi)發(fā)以及移動(dòng)設(shè)備軟件方面已經(jīng)大行其道,而編譯原理也是其中重要一環(huán)。所謂編譯原理就是將人們編寫(xiě)的源代碼轉(zhuǎn)換成為機(jī)器可以識(shí)別的二進(jìn)制代碼(0、1序列),以便能夠讓計(jì)算機(jī)執(zhí)行。

(編譯原理著重于如何將源代碼轉(zhuǎn)換為可執(zhí)行的二進(jìn)制代碼)
要理解 Linux 編譯原理,我們首先要理解編譯過(guò)程,Linux 編譯過(guò)程有3步:
1. 預(yù)編譯:此階段包括將命令行參數(shù)解析為適當(dāng)?shù)膮?shù),從源文件中包含預(yù)處理代碼,以及處理宏替換等步驟。它將源代碼預(yù)處理,將輸出轉(zhuǎn)換為它可以由編譯器理解的簡(jiǎn)單格式。
“`C
#include
int main(){
int a = 10;
printf(“a=%d\n”,a);
return 0;
}
在預(yù)編譯階段,將會(huì)進(jìn)行代碼的預(yù)處理,如上面的代碼中的`#include`宏會(huì)被替換為`stdio.h`的頭文件,并且編譯器會(huì)在編譯任務(wù)中加入對(duì)該頭文件的編譯任務(wù)。
2. 編譯:此階段將源代碼轉(zhuǎn)換為機(jī)器指令,從而使源代碼易于理解和執(zhí)行。
```C
.L.text:0000000000400480 ; ============= segment type: Pure code
.L.text:0000000000400480
.L.text:0000000000400480 ; -- File Contents of /usr/include/stdio.h:
.L.text:0000000000400480
.L.text:0000000000400480 movl $0xa, %esi
.L.text:0000000000400487 mov $0x4005e0, %edi
.L.text:000000000040048c call 0x400400
在編譯階段,將源代碼轉(zhuǎn)換為機(jī)器指令,如上面的代碼是為了實(shí)現(xiàn) printf 函數(shù)的調(diào)用,將會(huì)生成多條匯編指令,例如`movl`、`mov`以及`call`,它們可以被CPU執(zhí)行來(lái)實(shí)現(xiàn) printf 函數(shù)的功能。
3. 鏈接:此階段包括將編譯生成的可重定位目標(biāo)文件連接在一起,從而生成最終的可執(zhí)行文件。
“`asm
ff 25 00 a0 40 00 jmp *0x00400a0
在鏈接階段,將會(huì)為可重定位的文件生成可執(zhí)行的文件,比如上面的指令` jmp`就是用于跳轉(zhuǎn)到某個(gè)指定的地址,當(dāng)遇到此指令時(shí),CPU會(huì)定位轉(zhuǎn)到指定的地址,繼續(xù)執(zhí)行下去。
因此,Linux 編譯原理由這三個(gè)步驟組成,分別是預(yù)編譯、編譯和鏈接,上述步驟完成之后,就能夠生成可執(zhí)行文件,以便讓計(jì)算機(jī)去執(zhí)行程序??梢哉f(shuō),了解 Linux 編譯原理有助于開(kāi)發(fā)者更好的理解它的編寫(xiě)流程,并且更加高效地開(kāi)發(fā) Linux 平臺(tái)的程序。
創(chuàng)新互聯(lián)網(wǎng)絡(luò)推廣網(wǎng)站建設(shè),網(wǎng)站設(shè)計(jì),網(wǎng)站建設(shè)公司,網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),1500元定制網(wǎng)站優(yōu)化全包,先排名后付費(fèi),已為上千家服務(wù),聯(lián)系電話(huà):13518219792
網(wǎng)頁(yè)名稱(chēng):深入淺出LinuxFPI編譯原理(linuxfpic)
分享URL:http://m.5511xx.com/article/cddhoio.html


咨詢(xún)
建站咨詢(xún)
