網站開發(fā)公司對比新開發(fā)的app怎么推廣
1.交叉編譯是什么,為什么要交叉編譯
- 編譯:在一個平臺上生成在該平臺上的可執(zhí)行代碼
- 交叉編譯:在一個平臺上生成在另一個平臺上的可執(zhí)行代碼
- 交叉編譯的例子:如51單片機的可執(zhí)行代碼(hex文件)是在集成環(huán)境keil上面編譯完成的,我們只需要將編譯好的可執(zhí)行代碼下載到51單片機上即可運行
- 要使用交叉編譯的原因:
(1)目的的平臺上的資源貧乏,無法運行或安裝我們所需的編譯器
(2)有時因為目的平臺還沒有建立,連操作系統(tǒng)都沒有,根本談不上運行什么編譯器
(3)平臺的運行至少需要的兩樣東西:bootloader(啟動引導代碼)和操作系統(tǒng)核心,這兩樣東西也是代碼,同樣需要進行編譯為可執(zhí)行代碼才可運行,而此時原平臺根本不支持編譯,同樣需要在其他平臺上編譯好可執(zhí)行代碼
2.交叉編譯中的基礎知識
- 宿主機(host) :編輯和編譯程序的平臺,一般是基于X86的PC機,通常也被稱為主機。
- 目標機(target):用戶開發(fā)的系統(tǒng),通常都是非X86平臺。host編譯得到的可執(zhí)行代碼在target上運行。
- 交叉編譯需要用到的工具:交叉編譯工具鏈
3.交叉編譯工具鏈
- arm32位:百度網盤鏈接:https://pan.baidu.com/s/1tw1SYXdJ2n0olry9SSc3gg
提取碼:xfjs
這是要編譯為arm32位的系統(tǒng)能運行的代碼的交叉工具鏈接 - arm64位:百度網盤鏈接:https://pan.baidu.com/s/14H-Xg31wVlidk_RwCLJrUg
提取碼:xfjs
或者到這個鏈接:aarch64下載下面這個壓縮包
gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
4.安裝交叉編譯工具鏈
- 將下載好的壓縮包通過ftp文件傳輸軟件傳到ubuntu中去,我用的是filezilla軟件,這個軟件免費好用,直接網上下載即可
- 解壓壓縮包
tar -xvf gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu.tar.xz
得到如下文件夾
- 進入到交叉編譯工具鏈的bin目錄下
cd gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
然后查看交叉編譯的工具版本看是否安裝好
./aarch64-linux-gnu-gcc -v
出現(xiàn)上圖所示的版本號后,表示我們此時的交叉編譯工具是可以使用了的,但是因為沒有配置環(huán)境變量,我們此時只能在這個文件夾的bin目錄下進行使用,非常不方便,所以要配置環(huán)境變量方便使用
- 配置環(huán)境變量
首先使用
echo $PATH
查看自己的環(huán)境變量
將現(xiàn)有的環(huán)境變量復制下來
然后用
pwd
查看自己當前所在交叉編譯工具鏈的bin目錄的完整路徑
將這個目錄也復制下來,要將這個目錄加入到環(huán)境變量中
最后回到回到工作目錄,打開.bashrc這個隱藏文件
vi .bashrc
在文件的后面根據(jù)自己的交叉編譯工具鏈bin目錄的位置加入環(huán)境變量,
export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/workspace/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:/home/CLC/workspace/gcc-linaro-5.5.0-2017.10-x86_64_aarch64-linux-gnu/bin
接著輸入
source /home/CLC/.bashrc
加載配置文件,馬上生效配置。
這時在任意目錄下輸入
aarch64-linux-gnu-gcc -v
顯示如下圖所示,即表示交叉編譯工具鏈安裝完成了
5.交叉編譯一個helloworld丟到樹莓派上運行
- 編寫一個test.c的文件
#include <stdio.h>int main()
{printf("hello world!\n");return 0;
}
- 交叉編譯這個test.c文件
aarch64-linux-gnu-gcc test.c -o helloInArm64
此時如果在x86的平臺上運行這個可執(zhí)行文件就會報錯
我們可以用
file helloInArm64
查看這個文件的屬性
這里只顯示了它是一個64位的可執(zhí)行文件,但沒有顯示平臺架構,我們將它這個可執(zhí)行文件放到樹莓派等相關的arm架構平臺上他就會顯示平臺的架構
- 在樹莓派上運行這個交叉編譯后的文件
先使用
file helloInArm64
查看文件屬性
這時就會顯示平臺的架構了
然后直接運行
一個交叉編譯的hellworld就運行成功了
一開始我安裝的交叉編譯工具是arm32位的,編譯出來的可執(zhí)行文件也是32位的,但我放到我64位的樹莓派上也一樣可以運行起來