交叉编译工具链详解
交叉编译是什么,为什么要交叉编译一、 是什么交叉编译是在一个平台上生成另一个平台上的可执行代码。例如1、我们在windows上面编写C51代码,并编译成可执行文件代码,如xx.h在C51上面运行,然后在C51上面运行,不是在windows上面运行2、我们在Ubuntu上面写树莓派代码,并编译成可执行文件,如a.out,是在树莓派上面运行,不是在Ubuntuu Linux上面运行编译的意思是在一个平
交叉编译是什么,为什么要交叉编译
一、 是什么
交叉编译是在一个平台上生成另一个平台上的可执行代码。
例如
- 我们在windows上面编写C51代码,并编译成可执行文件代码,如xx.hex,然后在C51上面运行,不是在windows上面运行
- 我们在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库
首先理解软链接和硬链接
软链接
- 软链接的文件类似于windows的快捷方式
- 软链接的文件是一个符号,不占用内存空间的
- 这个文件实际是一个文本文件,其中里面包含有另外一个文件的位置信息
- 创建软链接文件输入指令ln -s libwiringPi.so.2.50 libwiringPi.so,这样libwiringPi.so软链接文件就指向了libwiringPi.so.2.50这个文件
- 使用libwiringPi.so就称为软链接
硬链接
- 创建硬链接文件,输入指令:ln libwiringPi.so.2.50 libwiringPi.so
- 硬链接会在硬链接文件上生成和原文件大小相同的内容
- 无论是软或硬链接,软或硬链接文件都是同步的
获取wiringPi包并使用
- 进入Windows阶段三把WiringPi文件上传到Linux lessonPI目录下
- 进入树莓派/usr/lib,输入指令获取libwiringPi.so.2.50包:scp libwiringPi.so.2.50 pi@192.168.1.1:/home/pi/lessonPI
- Linux收到文件后输入指令创建软链接文件ln -s libwiringPi.so.2.50 libwiringPi.so
- 使用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
更多推荐
所有评论(0)