一、原材料 tool-master
宿主机:x86
目标机:树莓派
tool-master下载地址:https://github.com/raspberrypi/tools
二、安装步骤
1.解压zip
在压缩包目录下输入unzip 文件名解压
2.进入文件夹
cd arm-bcm2708
cd gcc-linaro-arm-linux-gnueabihf-raspbian-x64(32位的不带-x64)
ls
找到arm-linux-gnueabihf-gcc这个软链接
./arm-linux-gnueabihf-gcc -v 打印出gcc的版本信息
看是不是4.8.3
但是每次使用工具都要进入这个路径会很麻烦 所以需要对环境变量进行操作
有两种方式 一种时临时的,一种可以永久使用
临时方法:
echo $PATH 获取当前的环境变量
pwd获取当前路径
export PATH = /usr/…(echo 获得的 到home前的路径)… + pwd的路径
这种方法时临时的 并且新打开的窗口依然无法使用
永久方法:
修改工作目录下的.bashrc文件 在文件尾部输入
export PATH = /usr/…(echo 获得的 到home前的路径)… + pwd的路径
然后source .bashrc 立即执行
三、使用
原材料 test.c
1.gcc test.c -o test1
生产一个test1文件
file test1 查看文件属性 发现只能运行在x86-64的环境下
2.arm-linux-gnueabihf-gcc test.c -o test2
生成一个test2文件
file test2 查看文件属性 发现只能运行在ARM环境下
3.发送test2到树莓派
scp test2 pi@192.168.43.33:/home/pi
scp:指令名
test2:文件名
pi:目标设备名
@192.168.43.33:目标设备的IP地址
:/home/pi :存放的绝对路径
发送指令后输入密码
如出现The authenticity of host ‘XXXX’ can’t be established的问题
参考https://blog.csdn.net/xyh153996626/article/details/53333348
在树莓派下直接运行即可
/home/xys/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
如我的ubuntu上没有安装wiringPi的库,那么需要去下载一个库,如果下载后build发现这个库的环境是x86的,而交叉编译的目标需要是arm的。这样arm-linux-gnueabihf-gcc时编译器会报错,未定义wiringPiSetup等api。这时需要我们交叉编译wiringPi库。
但是最快捷的方式就是从树莓派上直接拿一个wiringPi库过来。
在/usr/lib中找到libwiringPi.so这个软链接 查看一下他指向那个动态库。
把指向的动态库传给ubuntu。
scp libwiringPi.so.2.50 【设备名】@192.168.43.101:/home/xys/lessonPi
在lessonPi文件夹下就能找到这个库了
接下来我们给这个库创建一个软链接。
ln -s libwiringPi.so libwiringPi.so.2.50
软链接相关描述查看这篇文章:
https://www.cnblogs.com/zhangna1998517/p/11347364.html
实际上软链接就像是windows的快捷方式,软链接不占用内存空间,仅仅是一个符号而已,也可以用指针来理解,相当于这个文本中存放的是源文件的地址。
这些工作都完成后我们可以发现在wiring目录下存在libwiringPi.so这个软链接,还有前面下载并build的那个库,虽然这个库是x86的不能完成交叉编译。但是这里面会有wiringPi.h等头文件 是需要用到的
最后编译:
arm-linux-gnueabihf-gcc test3.c -I /home/xys/lessonPi/wiringPi/wiringPi -L ./ -lwiringPi -o crossCompile
生成的文件发送回树莓派直接运行就可以了