交叉编译是什么,为什么要交叉编译

一、 是什么

交叉编译是在一个平台上生成另一个平台上的可执行代码。
例如

  1. 我们在windows上面编写C51代码,并编译成可执行文件代码,如xx.hex,然后在C51上面运行,不是在windows上面运行
  2. 我们在Ubuntu上面写树莓派代码,并编译成可执行文件,如a.out,是在树莓派上面运行,不是在Ubuntuu Linux上面运行

编译的意思

是在一个平台上生成在该平台上的可执行代码

交叉编译的意思

C51交叉编译发生在keil(集成环境上面),运行环境是C51

二、为什么要交叉编译

平台上不允许或不能安装我们需要的编译器
原因
因为目的平台上的资源贫乏,无法运行我们需要的编译器
例如
C51平台上面资源贫乏,安装不起keil

树莓派是不是就不需要交叉编译? 错,也要。树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!

宿主机(host):编译和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

交叉编译需要用到工具是交叉编译器/交叉编译工具链

三、交叉编译工具链安装

下载
https://github.com/raspberrypi/
输入指令unzip tools-master.zip解压到Linux环境文件夹lessonPI(自定义)中
1、临时有效:
首先输入指令进入/home/pi/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
然后输入命令设置临时环境变量
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/pi/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
2、永久有效:
输入命令打开vi /home/pi/.bashrc 在.bashrc文件最后加入export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/pi/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
保存后退出,输入source /home/pi/.bashrc加载下.bashrc文件
检查是否安装成功
输入指令:arm-linux-gnueabihf-gcc -v
显示:如4.8.3代表成功

四、交叉编译工具链使用(不带wiringPi库)

编译
在宿主机编译:arm-linux-gnueabihf-gcc server.c -o server
查看server架构:file server
上传
输入指令:scp server pi@192.168.1.1:/home/pi

五、Linux环境使用树莓派wiringPi库

首先理解软链接和硬链接

软链接

  1. 软链接的文件类似于windows的快捷方式
  2. 软链接的文件是一个符号,不占用内存空间的
  3. 这个文件实际是一个文本文件,其中里面包含有另外一个文件的位置信息
  4. 创建软链接文件输入指令ln -s libwiringPi.so.2.50 libwiringPi.so,这样libwiringPi.so软链接文件就指向了libwiringPi.so.2.50这个文件
  5. 使用libwiringPi.so就称为软链接

硬链接

  1. 创建硬链接文件,输入指令:ln libwiringPi.so.2.50 libwiringPi.so
  2. 硬链接会在硬链接文件上生成和原文件大小相同的内容
  3. 无论是软或硬链接,软或硬链接文件都是同步的

获取wiringPi包并使用

  1. 进入Windows阶段三把WiringPi文件上传到Linux lessonPI目录下
  2. 进入树莓派/usr/lib,输入指令获取libwiringPi.so.2.50包:scp libwiringPi.so.2.50 pi@192.168.1.1:/home/pi/lessonPI
  3. Linux收到文件后输入指令创建软链接文件ln -s libwiringPi.so.2.50 libwiringPi.so
  4. 使用wiringPi库编译的c文件:
    编译格式arm的gcc 要编译文件 -I wiringPi.h的路径 -LlibwiringPi.so软链接的路径 -lwiringPi
    arm-linux-gnueabihf-gcc IO.c -I /home/pi/lessonPI/WiringPi/WiringPi/wiringPi -L/home/pi/lessonPI -lwiringPi
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐