什么是交叉編譯呢,簡單地說,就是在一個平臺上生成另一個平臺上的可執行代碼。這里需要注意的是所謂
平臺,實際上包含兩個概念:體系結構(
Architecture
)、操作系統(
Operating System
)。同一個體系結
構可以運行不同的操作系統;同樣,同一個操作系統也可以在不同的體系結構上運行。
?
嵌入式系統往往資源都是很有限的,如果其資源和我們平常用的桌面計算機(在嵌入式系統開發中我們稱之為主機, host machine )一樣,那我想可能就不存在交叉編譯這么一說了。最為典型的是,嵌入式系統的內存往往是幾兆字節,且只有 FLASH 而沒有硬盤這種大容量存儲設備。也就是說在這種資源有限的環境中,我們 不可能 將我們的開發工具安裝在嵌入式設備中(在嵌入式系統開發中我們稱之為目標機, target machine ),然后象我們平時做桌面開發那樣,在上面進行編碼、調試最后發布軟件。
?
現實情況是,嵌入式系統的開發是在主機上進行的,那就存在一個問題:當我們的目標機處理器與主機的處理器不同時(比如目標機是 ARM 處理器,而主機是 x86 處理器),在這種請況下,如何保證在主機上編譯的程序能在目標機上運行呢? 答案在于編譯器上 !我們說嵌入式開發用的編譯器與我們平時做桌面開發的編譯器是不同的,在平時,我們的編譯器是運行在什么處理器上,其編譯出來的可執行程序也是運行在同樣的處理器上的。實際上, 我們可以讓一個編譯器運行在 x86 主機上,卻編譯出可以在 ARM 上運行的可執行程序 ,這種編譯器就是交叉編譯器( cross compiler ),而采用交叉編譯器進行編譯就是指交叉編譯( cross compiling ),而交叉編譯器相關的環境就是指交叉編譯環境( cross compiling environment )。
?
舉一個例子,這個例子就是
VxWorks
(
一種嵌入式實時操作系統
)的
Workbench
(在早期版本中是
Tornado
協同仿真環境
)。這是一個
VxWorks
的開發環境,其除了采用
Eclipse
作為
IDE
外,后面采用的是
GNU
的
GCC
編譯器進行程序編譯。有人可能要問,
GCC
能運行在
Windows
上?其實,
GCC
不是直接運行在
Windows
上的,
Workbench
采用
Cygwin
(
在
windows
平臺上運行的
unix
模擬環境
)作為其編譯器的支撐環境,也就是說
GCC
及其
binutils
是運行在
Cygwin
上的。采用
Workbench
我們可以開發幾乎所有主流處理器的嵌入式產品,而所有的工作都在
Windows
上完成的!
至此,相信你對交叉編譯、交叉編譯器和交叉編譯環境有了很好的了解了。?
?
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
