交叉编译工具链的安装及带wiringPi库的交叉编译实现
- 交叉编译的概念
- 交叉编译工具链的安装
- 下载交叉编译工具链
- 配置环境遍变量
- 编译程序到ARM平台
- 带wiringPi库的交叉编译
- 下载编译wiringPi库
- 调用树莓派的wringPi库
交叉编译的概念
- 交叉编译是在一个平台上生成另一个平台上的可执行代码。
- 因为目的平台上的资源贫乏,无法运行我们所需要编译器
- 宿主机(host) :编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
- 目标机(target):用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。
交叉编译工具链的安装
下载交叉编译工具链
-
通过 树莓派官方 提供的交叉编译工具链下载并拷贝至ubuntu解压,其中解压指令为:
unzip tools-master.zip
-
下载,解压进入以下路径(64位机):tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
-
通过
ls -l
查看所指向的真正目标文件 -
查看arm-linux-gcc 版本
./arm-linux-gnueabihf-gcc -v
-
查看当下环境变量
echo $PATH
配置环境遍变量
临时有效: 在当前环境变量中添加bin的路径地址,即在当下配置环境变量 :export PATH=$PATH:[bin所在的路径]
export PATH=$PATH:/home/yuanjl/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
永久有效:
-
打开目录下的.bashrc隐藏文件(配置命令终端):
vi /home/yuanjl/.bashrc
-
在文件最后添加环境变量指令
export PATH=$PATH:/home/yuanjl/pi/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
-
重新生效.bashrc文件
source /home/yuanjl/.bashrc
-
新终端测试arm-linux-gcc版本
编译程序到ARM平台
- 程序编译
arm-linux-gnueabihf-gcc xx.c -o xxx
- 拷贝可执行程序到开发板
scp xxx pi@192.168.137.114:/home/pi
带wiringPi库的交叉编译
下载编译wiringPi库
通过克隆官方wiringPi库获取
git clone git://git.drogon.net/wiringPi
查看安装INSTALL文件
构建:
./build
编译程序:
arm-linux-gnueabihf-gcc demo2.c -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi -lwiringPi
报错:
arm-linux-gnueabihf-gcc demo2.c -lwiringPi -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi
/home/yuanjl/pi/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库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。
- 通过 -I -L 来指定
下载的wiringPi缺少configure,无法配置成arm-linux平台,编译出来的库只适合X86平台,不适合Linux平台。
调用树莓派的wringPi库
问题解决: 把树莓派的wringPI库拿上来用
若还没有安装WiringPi库,参考安装:树莓派安装WiringPi库
/usr/lib
查看软连接
ls -l |grep wiringPi
将树莓派上的wiringPi拷贝至ubuntu
scp libwiringPi.so.3.10 yuanjl@192.168.118.128:/home/yuanjl/pi
在ubuntu上自行创建软连接:
参考博文:Linux创建连接命令 ln -s创建软连接
为libwiringPi软件软链接:
ln -s libwiringPi.so.3.10 libwiringPi.so
概念补充:
软链接:
- 软链接文件有类似于Windows的快捷方式。
- 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
- 你选定的位置上生成一个文件的镜像,不会占用磁盘空间
- 如何生成:
ln -s libwiringPi.so.2.50 libwiringPi.so
- 指令 参数 要被链接的文件 软链接文件名字
硬链接:
ln libwiringPi.so.2.50 libwiringPi.so
- 它会在你选定的位置上生成一个和源文件大小相同的文件
重新编译程序
arm-linux-gnueabihf-gcc demo2.c -I /home/yuanjl/pi/WiringPi/WiringPi/wiringPi -L. -lwiringPi