交叉编译及树莓派(或其他平台)交叉编译工具链的安装

交叉编译是什么:
交叉编译是一个行为,是在一个平台上生成另一个平台上的可执行代码。
比如:我们在windows上面编写C51的代码,并编译成可执行代码,如xx.hex,是在C51上面运行不是在windows上面运行。

同样:我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如xx.out,是在树莓派上面运行不是在linux上面运行。

编译:是在一个平台上生成在该平台上的可执行的代码。
C51 交叉编译的发生在kill(集成环境上面)
为什么要交叉编译:
平台上不允许或不能够安装我们所需要的编译器,比如C51,而树莓派可以。
1、目的平台上的资源贫乏,无法运行我们所需要编译器
2、既然树莓派能够安装我们所需要的编译器,是不是不需要交叉编译?
其实也要
因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也需要编译。
平台运行至少需要两样东西:bootloader(后动引导代码)以及操作系统核心。
宿主机(host):编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
交叉编译需要用到的工具:
交叉编译器,交叉编译工具链

交叉编译相关内容详细介绍:https://baike.baidu.com/item/%E4%BA%A4%E5%8F%89%E7%BC%96%E8%AF%91/10916911?fr=aladdin

交叉编译工具链的安装:
1、临时有效
PATH环境变量(将命令加入终端,使命令使用更加方便,不用敲很长的路径)

1、从共享文件夹拷贝到工作目录

cp /mnt/hgfs/sharefromwindows/tools-master.zip .

2、解压

unzip tools-master.zip

3、找到工具路径

 cd tools-master/
 ls
 cd arm-bcm2708
 ls
 cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64
 ls
 cd bin
 ls
 ./arm-linux-gnueabihf-gcc -v
 echo $PATH// 显示当下的环境变量
 pwd//显示当前文件夹下的路径
 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是配置环境变量的意思)
注意:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:是从echo中复制的
/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin是pwd指令生成的所想要省略的文件路径

4、然后回到工作目录下

 arm-linux-gnueabihf-gcc -v//查看是否完成,出现gcc version 4.8.3 20140303 (prerelease) (crosstool-NG linaro-1.13.1+bzr2650 - Linaro GCC 2014.03)表示完成

2、永久有效
修改工作目录下的.bashrc (隐藏文件),用来配置命令终端的

 vi /home/CLC/.bashrc
 
 方法:
 将配置环境变量的代码粘贴到文件最后,就是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
 这样每次启动终端就会运行这个指令。
 
 source /home/CLC/.bashrc//加载配置文件,马上生效配置。

交叉编译工具链压缩包:
链接:https://pan.baidu.com/s/1ApdowTcTe4vchY_0qci5qA
提取码:9vci

这篇博文更加详细:https://blog.csdn.net/weixin_45309916/article/details/107789879

交叉编译如何执行:

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 表示可执行文件
//只能运行在X86-64位的电脑上

arm-linux-gnueabihf-gcc test.c -o test_2
//交叉编译,将test.c编译成树莓派可执行的代码
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上运行编译的树莓派的代码
bash: ./test_2: cannot execute binary file
//报错:不能解析这个文件

scp test_2 pi@192.168.0.118:/home/pi
//将这个编译好的程序复制到树莓派的/home/pi中
//格式是:scp 程序名 开发板的用户名@树莓派IP地址:开发板的绝对路径
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值