什么是交叉編譯呢,簡(jiǎn)單地說(shuō),就是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。這里需要注意的是所謂
平臺(tái),實(shí)際上包含兩個(gè)概念:體系結(jié)構(gòu)(
Architecture
)、操作系統(tǒng)(
Operating System
)。同一個(gè)體系結(jié)
構(gòu)可以運(yùn)行不同的操作系統(tǒng);同樣,同一個(gè)操作系統(tǒng)也可以在不同的體系結(jié)構(gòu)上運(yùn)行。
?
嵌入式系統(tǒng)往往資源都是很有限的,如果其資源和我們平常用的桌面計(jì)算機(jī)(在嵌入式系統(tǒng)開(kāi)發(fā)中我們稱(chēng)之為主機(jī), host machine )一樣,那我想可能就不存在交叉編譯這么一說(shuō)了。最為典型的是,嵌入式系統(tǒng)的內(nèi)存往往是幾兆字節(jié),且只有 FLASH 而沒(méi)有硬盤(pán)這種大容量存儲(chǔ)設(shè)備。也就是說(shuō)在這種資源有限的環(huán)境中,我們 不可能 將我們的開(kāi)發(fā)工具安裝在嵌入式設(shè)備中(在嵌入式系統(tǒng)開(kāi)發(fā)中我們稱(chēng)之為目標(biāo)機(jī), target machine ),然后象我們平時(shí)做桌面開(kāi)發(fā)那樣,在上面進(jìn)行編碼、調(diào)試最后發(fā)布軟件。
?
現(xiàn)實(shí)情況是,嵌入式系統(tǒng)的開(kāi)發(fā)是在主機(jī)上進(jìn)行的,那就存在一個(gè)問(wèn)題:當(dāng)我們的目標(biāo)機(jī)處理器與主機(jī)的處理器不同時(shí)(比如目標(biāo)機(jī)是 ARM 處理器,而主機(jī)是 x86 處理器),在這種請(qǐng)況下,如何保證在主機(jī)上編譯的程序能在目標(biāo)機(jī)上運(yùn)行呢? 答案在于編譯器上 !我們說(shuō)嵌入式開(kāi)發(fā)用的編譯器與我們平時(shí)做桌面開(kāi)發(fā)的編譯器是不同的,在平時(shí),我們的編譯器是運(yùn)行在什么處理器上,其編譯出來(lái)的可執(zhí)行程序也是運(yùn)行在同樣的處理器上的。實(shí)際上, 我們可以讓一個(gè)編譯器運(yùn)行在 x86 主機(jī)上,卻編譯出可以在 ARM 上運(yùn)行的可執(zhí)行程序 ,這種編譯器就是交叉編譯器( cross compiler ),而采用交叉編譯器進(jìn)行編譯就是指交叉編譯( cross compiling ),而交叉編譯器相關(guān)的環(huán)境就是指交叉編譯環(huán)境( cross compiling environment )。
?
舉一個(gè)例子,這個(gè)例子就是
VxWorks
(
一種嵌入式實(shí)時(shí)操作系統(tǒng)
)的
Workbench
(在早期版本中是
Tornado
協(xié)同仿真環(huán)境
)。這是一個(gè)
VxWorks
的開(kāi)發(fā)環(huán)境,其除了采用
Eclipse
作為
IDE
外,后面采用的是
GNU
的
GCC
編譯器進(jìn)行程序編譯。有人可能要問(wèn),
GCC
能運(yùn)行在
Windows
上?其實(shí),
GCC
不是直接運(yùn)行在
Windows
上的,
Workbench
采用
Cygwin
(
在
windows
平臺(tái)上運(yùn)行的
unix
模擬環(huán)境
)作為其編譯器的支撐環(huán)境,也就是說(shuō)
GCC
及其
binutils
是運(yùn)行在
Cygwin
上的。采用
Workbench
我們可以開(kāi)發(fā)幾乎所有主流處理器的嵌入式產(chǎn)品,而所有的工作都在
Windows
上完成的!
至此,相信你對(duì)交叉編譯、交叉編譯器和交叉編譯環(huán)境有了很好的了解了。?
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元

