交叉编译简介
交叉编译是在一个平台上生成另一个平台上的可执行代码
gcc a.c 代码编译
编译就是生成一个在本平台可执行的代码
a.out 生成的可执行文件
故交叉编译就是在一个平台编译一个可以在另一平台可执行的程序
为什么要交叉编译
有的平台没有办法安装想要的编译器,平台空间有限,内存不足以安装编译器
硬件不同,程序在不同环境中运行的条件不同,所以要对应的编译工具做编译成对应目标平台的可执行文件
交叉编译工具链
工具下载:
arm-linux-gnueabihf-gcc 编译工具
http://github.com/raspberrypi/
unzip tools-master.zip 解压文件
临时有效:
echo $PATH 查看环境变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/yangyingchun/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
配置PATH环境变量
只能配置当时打开的命令终端窗口的
永久有效:
修改工作目录下的.bashrc文件,是隐藏文件,是配置命令终端的
vi /home/yang/.bashrc 打开要修改的配置文件
在文件最后一行加入配置的环境变量
修改原有的配置文件
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/yangyingchun/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
source /home/yang/.bashrc 加载这个配置文件,使其马上生效
scp test_1 pi@192.168.22.33:/home/pi 把文件test_1复制到树莓派
带wiringPi库的交叉编译
正常是 gcc test.c -lwiringPi 就可以编译出树莓派能用的库
有时也可以 gcc test.c -I ./ -lwiringPi 通过 -I 去找后面 ./ 路径下的lwiringPi库
可以直接复制树莓派的库libwiringPi.so.2.50到linux
scp libwiringPi.so.2.50 pi@192.168.22.33:/home/yang
软链接:1
- 软链接文件类似于Windows的快捷方式
- 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息
- 它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间
具体用法是:ln -s 源文件 目标文件
ln -s libwiringPi.so.2.50 libwiringPi.so
硬链接:
- 没有参数-s
- 它会在你选定的位置上生成一个和源文件大小相同的文件
用法:
ln libwiringPi.so.2.50 libwiringPi.so
无论是软链接还是硬链接,文件都保持同步变化
编译
arm-linux-gnueabihf-gcc demo2.c -I /home/yangyingchun/lessonPI/WiringPi/wiringPi -L /home/yangyingchun/lessonPI -lwiringPi -o crossDemo2
gcc 编译工具 -I 去找头文件 -L 去找库 -lwiringPi 连库 -o 命名