我們之前常見的軟體開發,都是屬於本地編譯:比如說ununtu下gcc的編譯就是本地編譯,也就是說在當前平台編譯,編譯得到的程式也是在本地執行。
交叉編譯通俗地講就是在一種平台上編譯出能執行在體系結構不同的另一種平台上的程式,比如在pc平台(x86 cpu)上編譯出能執行在以arm為核心的cpu平台上的程式,編譯得到的程式在x86 cpu平台上是不能執行的,必須放到arm cpu平台上才能執行,雖然兩個平台用的都是linux系統。這種方法在異平台移植和嵌入式開發時非常有用。
簡言之就是在一種平台上編譯,編譯出來的程式,是放到別的平台上執行,即編譯的環境和執行的環境不一樣,屬於交叉的。
例子:例 1.1. 在x86平台上編譯,在arm平台上執行
一種最常見的例子就是:
在進行嵌入式開發時
手上有個嵌入式開發板,cpu是arm的
然後在x86的平台下開發,比如ubuntu的linux,或者是win7
然後就需要:
在x86的平台上,(用交叉編譯器)去編譯你寫好的程式**
編譯生成的(可執行的)程式,是放到目標開發板,arm的cpu上執行的
此所謂:在x86平台上編譯,在arm平台上執行
主要原因是:嵌入式系統中的資源太少
具體的解釋就是:交叉編譯出來的程式,所要執行的目標環境中,各種資源,都相對有限,所以很難就行直接的本地編譯
最常見的情況是:在進行嵌入式開發時,目標平台,即嵌入式開發板,比如是最大主頻200mhz的arm的cpu,加上32m的ram,加上1g的nand flash等等。在如此相對比較緊張的硬體資源的前提下,在已經執行了嵌入式linux的前提下,是沒法很方便的直接在嵌入式linux下,去本地編譯,去在arm的cpu下,編譯出來,供arm的cpu可以執行的程式的。因為編譯,開發,都需要相對比較多的cpu,記憶體,硬碟等資源,而嵌入式開發上的那點資源,只夠嵌入式(linux)系統執行的,沒太多剩餘的資源,供你本地編譯。
那麼我們為什麼要在ubuntu上搭建樹莓派交叉編譯環境?
雖然樹莓派的主頻可達700mhz遠高於一般的嵌入式系統,但相比於pc機其效能還是差些,使用交叉工具鏈可節約開發時間。在編譯鏈結同等規模的**時,pc機所用的時間應少於樹莓派所用時間,通過交叉編譯的方法提高效率。
pc機環境 ubuntu 14.04 amd64
請注意32位系統和64位系統存在差異,本文的程式在ubunut 14.04 amd64系統
搭建步驟:
(1)安裝git工具
(2)新建資料夾raspberrypi
(3)安裝交叉編譯工具
在該資料夾下,一共有5個不同版本的交叉編譯工具
arm-bcm2708hardfp-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian
arm-bcm2708-linux-gnueabi
gcc-linaro-arm-linux-gnueabihf-raspbian-x64
arm-rpi-4.9.3-linux-gnueabihf
其中arm-rpi-4.9.3-linux-gnueabihf和gcc-linaro-arm-linux-gnueabihf-raspbian-x64是64位機器用的,每乙個交叉編譯工具的目錄下都有bin目錄進入,執行./arm-linux-gnueabihf-gcc -v可檢視gcc版本。
在這裡我們使用的是 gcc-linaro-arm-linux-gnueabihf-raspbian-x64 版本
(4)新增環境變數
makun@makun:
~$ sudo vim ~
/.bashrc
64位新增:
新增完之後,接著執行以下指令以便立即更新當前控制台所包含的環境變數。
32位新增:
export path=pat
h:path:
path
:home/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
(5)簡單測試
為了測試交叉工具鏈是否安裝成功,可在控制台中輸入
arm-linux-gnueabihf-gcc -v
控制台中輸出內容如下,次步驟可證明交叉工具鏈安裝完成且環境變數設定無誤。
參考部落格:
在ubuntu交叉編譯 樹莓派
交叉編譯是在乙個平台上生成另乙個平台上的可執行 比如 1.我們再windows上面編寫c51 並編譯成可執行 如xx.hex,是在c51上面執行,不是在windows上面執行 2.我們在ubuntu上面編寫樹莓派的 並編譯成可執行 如a.out,是在樹莓派上面執行,不是在ubuntu linux上面...
Ubuntu實現樹莓派交叉編譯
一 交叉編譯 在乙個平台上生成另乙個平台上的可執行 為什麼要大費周折的進行交叉編譯呢?一句話 不得已而為之。有時是因為目的平台上不允許或不能夠安裝所需要的編譯器,而又需要這個編譯器的某些特徵 有時是因為目的平台上的資源貧乏,無法執行所需要的編譯器 有時又是因為目的平台還沒有建立,連作業系統都沒有,根...
Ubuntu實現樹莓派交叉編譯
一 交叉編譯 在乙個平台上生成另乙個平台上的可執行 為什麼要大費周折的進行交叉編譯呢?一句話 不得已而為之。有時是因為目的平台上不允許或不能夠安裝所需要的編譯器,而又需要這個編譯器的某些特徵 有時是因為目的平台上的資源貧乏,無法執行所需要的編譯器 有時又是因為目的平台還沒有建立,連作業系統都沒有,根...