交叉编译及树莓派(或其他平台)交叉编译工具链的安装
交叉編譯是什么:
 交叉編譯是一個(gè)行為,是在一個(gè)平臺(tái)上生成另一個(gè)平臺(tái)上的可執(zhí)行代碼。
 比如:我們?cè)趙indows上面編寫C51的代碼,并編譯成可執(zhí)行代碼,如xx.hex,是在C51上面運(yùn)行不是在windows上面運(yùn)行。
同樣:我們?cè)趗buntu上面編寫樹莓派的代碼,并編譯成可執(zhí)行代碼,如xx.out,是在樹莓派上面運(yùn)行不是在linux上面運(yùn)行。
編譯:是在一個(gè)平臺(tái)上生成在該平臺(tái)上的可執(zhí)行的代碼。
 C51 交叉編譯的發(fā)生在kill(集成環(huán)境上面)
 為什么要交叉編譯:
 平臺(tái)上不允許或不能夠安裝我們所需要的編譯器,比如C51,而樹莓派可以。
 1、目的平臺(tái)上的資源貧乏,無法運(yùn)行我們所需要編譯器
 2、既然樹莓派能夠安裝我們所需要的編譯器,是不是不需要交叉編譯?
 其實(shí)也要
 因?yàn)槟康钠脚_(tái)還沒有建立,連操作系統(tǒng)都沒有,根本談不上運(yùn)行什么編譯器。操作系統(tǒng)也是代碼,也需要編譯。
 平臺(tái)運(yùn)行至少需要兩樣?xùn)|西:bootloader(后動(dòng)引導(dǎo)代碼)以及操作系統(tǒng)核心。
 宿主機(jī)(host):編輯和編譯程序的平臺(tái),一般是基于X86的PC機(jī),通常也被稱為主機(jī)。
 目標(biāo)機(jī)(target):用戶開發(fā)的系統(tǒng),通常都是非X86平臺(tái)。host編譯得到的可執(zhí)行代碼在target上運(yùn)行。
 交叉編譯需要用到的工具:
 交叉編譯器,交叉編譯工具鏈
交叉編譯相關(guān)內(nèi)容詳細(xì)介紹:https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/10916911?fr=aladdin
交叉編譯工具鏈的安裝:
 1、臨時(shí)有效
 PATH環(huán)境變量(將命令加入終端,使命令使用更加方便,不用敲很長的路徑)
1、從共享文件夾拷貝到工作目錄
cp /mnt/hgfs/sharefromwindows/tools-master.zip .2、解壓
unzip tools-master.zip3、找到工具路徑
cd tools-master/lscd arm-bcm2708lscd gcc-linaro-arm-linux-gnueabihf-raspbian-x64lscd binls./arm-linux-gnueabihf-gcc -vecho $PATH// 顯示當(dāng)下的環(huán)境變量pwd//顯示當(dāng)前文件夾下的路徑export PATH=/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin (export是配置環(huán)境變量的意思) 注意: /usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:是從echo中復(fù)制的 /home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin是pwd指令生成的所想要省略的文件路徑4、然后回到工作目錄下
arm-linux-gnueabihf-gcc -v//查看是否完成,出現(xiàn)gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)表示完成2、永久有效
 修改工作目錄下的.bashrc (隱藏文件),用來配置命令終端的
交叉編譯工具鏈壓縮包:
 鏈接:https://pan.baidu.com/s/1ApdowTcTe4vchY_0qci5qA
 提取碼:9vci
這篇博文更加詳細(xì):https://blog.csdn.net/weixin_45309916/article/details/107789879
交叉編譯如何執(zhí)行:
gcc test.c -o test_1 file test_1 //file 用來查看文件屬性 test_1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=0xcfc35e8f92f7737433ebe182ff90ac60a2f058c7, not stripped //executable 表示可執(zhí)行文件 //只能運(yùn)行在X86-64位的電腦上arm-linux-gnueabihf-gcc test.c -o test_2 //交叉編譯,將test.c編譯成樹莓派可執(zhí)行的代碼 file test_2 //查看文件屬性 test_2: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0xb6ef18cf7462c1c0d7f4b8e455972204ae718324, not stripped./test_2 //在ubuntu上運(yùn)行編譯的樹莓派的代碼 bash: ./test_2: cannot execute binary file //報(bào)錯(cuò):不能解析這個(gè)文件scp test_2 pi@192.168.0.118:/home/pi //將這個(gè)編譯好的程序復(fù)制到樹莓派的/home/pi中 //格式是:scp 程序名 開發(fā)板的用戶名@樹莓派IP地址:開發(fā)板的絕對(duì)路徑總結(jié)
以上是生活随笔為你收集整理的交叉编译及树莓派(或其他平台)交叉编译工具链的安装的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: java学习(162):同步对象锁
 - 下一篇: 带wiringPi库的交叉编译