1. 交叉編譯工具鏈介紹
(資料圖片僅供參考)
1.1 交叉編譯
本地編譯:在當(dāng)前目標(biāo)平臺下,編譯出來的程序,放到當(dāng)前平臺下,就可以運(yùn)行的
交叉編譯:在一種平臺上編譯,編譯出來的程序,放到別的平臺上運(yùn)行(編譯和運(yùn)行環(huán)境不一樣,屬于交叉的)
交叉編譯是一個和本地編譯,相對應(yīng)的概念。 主要和嵌入式開發(fā)有關(guān),由于嵌入式系統(tǒng)中的各種資源相對有限,只夠嵌入式系統(tǒng)運(yùn)行的,沒太多剩余的資源,所以很難進(jìn)行直接的本地編譯
1.2 交叉編譯工具鏈
編譯過程是按照不同的子功能,依照先后順序組成的一個復(fù)雜的流程,如下圖:
編譯過程包括了預(yù)處理、編譯、匯編、鏈接等功能。 每個子功能都是一個單獨的工具來實現(xiàn),它們合在一起形成了一個完整的工具集。 同時編譯過程又是一個有先后順序的流程,牽涉到工具的使用順序,每個工具按照先后關(guān)系串聯(lián)在一起,形成了一個編譯工具鏈
交叉編譯工具鏈就是為了編譯跨平臺體系結(jié)構(gòu)的程序代碼而形成的由多個子工具構(gòu)成的一套完整的工具集。 同時它隱藏了預(yù)處理、編譯、匯編、鏈接等細(xì)節(jié),當(dāng)指定了源文件(.c)時,它會自動按照編譯流程調(diào)用不同的子工具,自動生成最終的二進(jìn)制程序映像(.bin)
注意:嚴(yán)格意義上來說,交叉編譯器,只是指交叉編譯的gcc,但是實際上為了方便,我們常說的交叉編譯器就是交叉編譯工具鏈
1.3 交叉編譯工具鏈命名規(guī)則
在使用交叉編譯鏈時,常常會看到下面這樣的名字:
arm-linux-gnueabihf-arm-none-linux-gnueabi-arm-cortex_a8-linux-gnueabi-mips-malta-linux-gnu-
這些交叉編譯鏈的命名通常會遵循一定的規(guī)則:arch-vender-os-abi
,各字段說明如下:
2. Ubuntu下搭建GCC交叉編譯工具鏈
Ubuntu自帶的gcc編譯器是針對X86架構(gòu)的,但是我們要編譯的是ARM架構(gòu)的代碼,所以需要一個在X86架構(gòu)PC上運(yùn)行,可以編譯ARM架構(gòu)代碼的交叉編譯器
2.1 下載交叉編譯器
本文使用Linaro出品的交叉編譯器, Linaro是一間非營利開放源代碼軟件工程公司,最著名的就是Linaro GCC編譯工具鏈(編譯器),其官網(wǎng)可以下載源碼
Linaro 網(wǎng)站提供了多種GCC交叉編譯工具鏈,我們使用的是Cortex-A7內(nèi)核的開發(fā)板,因此選擇arm-linux-gnueabihf,再根據(jù)32/64位系統(tǒng)下載不同版本的編譯器,這里選擇下載x86_64版本
2.2 安裝交叉編譯器
在Ubuntu中創(chuàng)建目錄/usr/local/arm
sudo mkdir /usr/local/arm
將下載好的交叉編譯器復(fù)制到該目錄中
sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f
拷貝完成后在該目錄中對交叉編譯工具進(jìn)行解壓
sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz
打開/etc/profile文件,修改環(huán)境變量,在文件末尾添加如下內(nèi)容
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
使用交叉編譯器,還需要安裝如下庫
sudo apt-get install lsb-core lib32stdc++6
2.3 交叉編譯器驗證
使用以下命令查看交叉編譯工具的版本號,若安裝正確就會顯示版本號
arm-linux-gnueabihf-gcc -v
從上圖可以看出當(dāng)前交叉編譯器的版本號為4.9.4,說明交叉編譯工具鏈安裝成功。 使用交叉編譯器的命令一般是arm-linux-gnueabihf-gcc
標(biāo)簽: