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

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


咨詢
建站咨詢
