交叉编译简介
同一个体系结构可以运行不同的操作系统,同一个操作系统也可以在不同的体系结构上行。交叉编译是在一个平台上生成另一个平台上的可执行代码。由于目标机器没有编译环境,需要在宿主机上编译,然后传输到目标机器。
交叉编译工具
树莓派:3b+,arm,32位
宿主机:ubutun18.04,x86,64位
交叉编译工具链:arm-linux-gnueabihf-gcc
测试代码交叉编译
#include<stdio.h>
int main()
{
printf("hello word\n");
return 0;
}
宿主机编译
arm-linux-gnueabihf-gcc test.c -o test_arm
目标机执行
交叉编译含wiringPi的程序
#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>
#define SW 0
void result()
{
int num;
if(wiringPiSetup() == -1)
{
printf("init pi fail\n");
exit(-1);
}
pinMode(SW,OUTPUT);
digitalWrite(SW,HIGH);
while(1)
{ printf("input 1 or 0:\n");
scanf("%d",&num);
if(num == 1)
{
digitalWrite(SW,LOW);
}
else if(num == 0)
{
digitalWrite(SW,HIGH);
}
else
{
printf("input error,input again:\n");
}
}
}
int main()
{
result();
return 0;
}
宿主机安装wiringPI库
unzip WiringPi.zip
cd WiringPi
chmod +x build
./build
将编译好的动态库文件(树莓派上编译好的)在宿主机上做链接
上传编译好的动态库到宿主机/usr/lib
建立软连接
ln -s libwiringPi.so.2.50 libwiringPi.so
ln -s libwiringPiDev.so.2.50 libwiringPiDev.s
交叉编译
arm-linux-gnueabihf-gcc test.c -I /root/WiringPi/wiringPi -lwiringPi -L /usr/lib -o test
I 指定头文件目录
L 指定动态库目录
o 生成程序的名字
目标机器执行