1、需要安装对应交叉编译工具链用来在宿主机上编译能在arm开发板上运行的代码
树莓派交叉编译工具链下载地址:
https://github.com/raspberrypi/tools
下载好后用FileZilla将压缩包传到宿主机(不会用自己百度)
解压编译工具链
unzip tools-master.zip
进到这个目录下
根据你宿主机是32位还是64位需要进入不同的路径选择交叉编译工具,例如:我的是64位,我进入64位下面
添加环境变量
cd ~/.bashrc //这是 /home/$(whoami)/ 路径下的隐藏文件
export PATH=$PATH:/home/$(whoami)/raspberry_src/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
$PATH 能获取环境变量
$(whoami) 能获取到主机的用户名
更新环境变量
source ~/.bashrc
2、在宿主机上进行交叉编译
在宿主机上一个程序hello.c ,然后用交叉编译工具 arm-linux-gnueabihf-gcc 编译代码
arm-linux-gnueabihf-gcc hello.c -o hello
编译完之后用file命令编译的文件格式
使用scp命令复制到开发板上
scp 目标文件 树莓派名@树莓派地址:存放文件的绝对路径
scp hello pi@192.168.1.11:/home/pi/
打开树莓派,运行代码
/home/pi/./hello
3、在宿主机上写树莓派程序,然后移植到Pi上运行
3.1、宿主机上安装wiringPi库(官网出问题了,自己去找安装包下载,然后上传到宿主机)
将下载的库导入到宿主机和树莓派
3.1.1、树莓派上安装
1、解压库的安装包
2、进入WiringPi文件夹下
cd WiringPi
3、运行build文件
./build
3.1.2、宿主机上安装
1、解压库的安装包
2、进入WiringPi文件夹下
cd WiringPi
3、查看文件下是否有一个配置文件configure或者Makefile文件
如果有配置文件,自己去查怎么改 (我的没有)
重点(里面没有配置文件),继续
因为编译代码需要链库 -lwiringPi -L 库的路径 ,下面是解决办法
1、进入树莓派库文件目录去找libwiringPi.so这个库 (可以在安装包里的INSTALL文件里知道库的安装路径)或(在跟文件下搜 sudo find / -name libwiringPi.so)
2、使用scp命令把这些文件都复制到你需要编译的代码路径下
3、打开宿主机需要编译代码的文件夹 ls -l 查看库文件
软链接
软链接
ln -s 源文件 目标
4、编译代码
4.1、缺少头文件路径
缺少头文件路径,去WiringPi解压的安装包里面找,然后复制过来,编译时指定头文件路径
arm-linux-gnueabihf-gcc xxx.c -I /hoem/pg/头文件路径
4.2、缺少库文件路径
缺少库文件路径 ,把刚刚树莓派复制的库路径指出来
arm-linux-gnueabihf-gcc xxx.c -I /home/pg/头文件路径 -lwiringPi -L /home/pg/库文件路径
4.3、交叉编译工具libc版本低于树莓派的gcc编译器libc版本
原因:因为我们的库是树莓派编译的,然后从树莓派那里复制到宿主机的,然后导致在宿主机出现这样的报错。
解决方法:查看宿主机系统是否自带这样的编译器
安装编译器:
sudo apt-get install gcc-arm-linux-gnueabihf
安装好后,因为我们之前在.bashrc文件下有和这个编译同样名字交叉编译工具,这里我们要去,bashrc文件下把刚刚添加的交叉编译环境注释掉或删掉
然后继续编译代码,发现还是报同样的错,然后查看宿主机libc版本和树莓派libc版本,发现宿主机版本低于树莓派版本
查看宿主机libc版本:(我用的ubuntu18) libc版本2.27
查看树莓派libc版本:libc版本2.31
解决方案:1、更新libc版本到2.31,这里不建议,因为把持不住,系统容易被你搞坏
2、装更新的虚拟机 (我选择了第二种方案)
更新虚拟机到 ubuntu20 (不会装虚拟机自己去百度)
1、查看ubuntu20版本的glibc版本 2.31的libc版本(一定要版本一样,不然高版本在在树莓派上也会报错)
2、重复上面的步骤 去装系统的arm交叉编译工具
1、更新源
sudo apt-get update
2、查看系统是否自带编译器
apt-cache search gcc | grep arm-linux
3、 安装编译器
sudo apt-get install gcc-arm-linux-gnueabihf
3、在ubuntu20里面编译代码
4、去树莓派根目录下找到libcrypt库把它复制到宿主机编译文件下
3、成功编译代码