一、交叉编译工具链的安装:
(交叉编译:在一个平台上生成另一个平台上的可执行代码。)
1. 临时有效
进入工作共享文件目录,我这里是:
cd /mnt/hgfs/sharefromwindows/
把想要的编译工具安装包拷贝到工作目录:
cp /mnt/hgfs/sharefromwindows/tools-master.zip .
!!!注意最后有一个 “ . ”
对安装包进行解压:
unzip tools-master.zip
进入编译工具的可编译目录:
cd /home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
查看当前环境变量:
echo $PATH
显示当前文件夹路径:
pwd
配置环境变量:
export PATH=(echo $PATH显示的结果) + : + / + (pwd显示的结果)
我这里是:
export PATH=/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
2. 永久有效
修改工作目录下(pwd)的 .bashrc 隐藏文件,配置命令终端。
在文件最后一行加上刚刚配置环境变量:
如:
export PATH=/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指令,加载配置文件,使配置马上生效:
source 工作目录(pwd)/.bashrc
如:source /home/CLC/.bashrc
二、交叉编译服务客户端:
- 检查交叉编译工具的版本:
arm-linux-gnueabihf-gcc -v
- 生成可执行文件:
arm-linux-gnueabihf-gcc xxx.c -o xxx
- 把编译生成的可执行文件下载到开发板:
scp xxx pi@192.168.227.10:/home/pi
格式:
指令 文件名 开发板用户名@开发板ip地址:想要存放的绝对路径
三、带wiringPi库的交叉编译如何进行:
- 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的时候,链接库的格式也是正确的。
- 通过-I -L来指定
运行命令后我们发现此时出现报错:
/home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/../lib/gcc/arm-linux-gnueabihf/4.8.3/../../../../arm-linux-gnueabihf/bin/ld: cannot find -lwiringPi
collect2: error: ld returned 1 exit status
是因为链接的库格式不对,此时是宿主机的平台,所以出现报错信息。
- 建立软链接
我们可以把树莓派的库传回虚拟机,使用树莓派的wiringPI库。
但需要建立libwiringPi.so与libwiringPi.so.2.50之间的软链接。
那软链接又是什么呢?
我们可以把软链接文件理解为类似于Windows的快捷方式,在符号链接中,文件实际上是一个文本文件,其中包含的有另一个文件的位置信息。
使用“ln -s xx(要被链接的文件) xx(软链接文件名字)”指令生成一个文件的镜像,不会占用磁盘空间。如:
ln -s libwiringPi.so.2.50 libwiringPi.so
输入“ls -l”查看软链接是否生成成功,如下图有箭头对应即成功生成:
- 建立硬链接
与软链接指令相比,没有参数-s。
即“ln xx(要被链接的文件) xx(软链接文件名字)”指令生成一个和源文件大小相同的文件。如:
ln libwiringPi.so.2.50 libwiringPi.so