- ** 交叉編譯是什麼,為什麼要交叉編譯**
交叉編譯: 是在一個平台上生成另一個平台上的可執行代碼。
我們再windows上面編寫C51代碼,并編譯成可執行代碼,如xx.hex,是在c51上面運作,不是在windows上面運作我們在ubuntu上面編寫樹莓派的代碼,并編譯成可執行代碼,如a.out,是在樹莓派上面運作,不是在ubuntu linux上面運作。
**編譯**:是在一個平台上生成在該平台上的可執行代碼。
-
為什麼要交叉編譯
平台上不允許或不能夠安裝我們所需要的編譯器比如C51
1.因為目的平台上的資源貧乏,無法運作我們所需要編譯器
2.樹莓派是不是就不需要交叉編譯?
錯。也要 樹莓派有時又是因為目的平台還沒有建立,連作業系統都沒有,根本談不上運作什麼編譯器。作業系統也是代碼,也要編譯!
主控端(host) :編輯和編譯程式的平台,一般是基于X86的PC機,通常也被稱為主機。
目标機(target):使用者開發的系統,通常都是非X86平台。host編譯得到的可執行代碼在target上運作。
- 交叉編譯需要用到什麼工具
交叉編譯器、交叉編譯工具鍊
- 交叉編譯工具鍊的安裝
https://github.com/raspberrypi/
從共享檔案夾拷貝到你需要放的工作目錄
拷貝完成進行解壓
unzip tools-master.zip
然後進入tools-master
我們要用的是arm-bcm2708,然後進入該目錄,我這台是64位的,自行選擇。
該目錄底下是一大堆可執行檔案,我們要用到的是我箭頭标志的那個
可以看下它的版本
./arm-linux-gnueabihf-gcc -v
如果要改成執行樹莓派的代碼,使用這個編譯器,它的路徑藏得很深,使用很麻煩,怎麼能讓它可以像使用gcc這麼友善呢?接下來就是設定環境變量了。
-臨時有效
顯示環境變量
echo $PATH
顯示目前檔案夾
pwd
接下來就是配置環境變量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/majie/testPi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
export PATH=這邊先複制下圖中的路徑
接着:後面加入剛剛pwd的路徑
我們回到工作目錄發現就可以直接使用了
-永久有效
修改工作目錄下的.bashrc 隐藏檔案(配置指令終端的)
vi /home/majie/.bashrc
翻到最後一行把剛剛上面那個export PATN=……複制下來
然後輸入下面的指令生效一下(要根據自己的工作目錄我這邊是我自己的)
source /home/majie/.bashrc
-
簡單的測試一下
用事先ubuntu裡面的測試代碼,能否在樹莓派裡面運作
#include <stdio.h>
int main()
{
printf("hello shumeipai\n");
return 0;
}
用交叉編譯工具
檢查下交叉編譯工具對不對:
arm-linux-gnueabihf-gcc -v
arm-linux-gnueabihf-gcc xxx.c -o xxx
arm-linux-gnueabihf-gcc test.c -o test_1
把test_1拷貝到樹莓派上
如何把編譯生成的可執行檔案下載下傳到開發闆:
scp clientInPi [email protected]:/home/pi
指令 檔案名 開發闆使用者名@開發闆位址:開發闆的絕對路徑
scp test_1 [email protected]:/home/pi
我們再看樹莓派是否收到
我們來運作下
總結
中途還是遇到很多問題的,比如安裝virtual box 的增強功能,以及剛剛傳樹莓派ip位址失敗燈小問題,百度都能解決。加油吧!!!!!!