交叉编译是什么,为什么要交叉编译

一、交叉编译是什么,为什么要交叉编译

1、什么是交叉编译

交叉编译

        交叉编译可以理解为:在当前编译平台上生成另一个目标平台上可执行代码,但是编译平台本身却不能运行该程序。

        比如,我们在 x86 平台上编写程序并编译成能运行在 ARM 平台的程序,编译得到的程序在 x86 平台上是不能运行的,必须放到 ARM 平台上才能运行。

本地编译

        是指编译源代码的平台执行源代码编译后程序的平台同一个平台。

2、为什么要交叉编译?

        1. 交叉编译的目标系统一般都是内存较小、显示设备简陋甚至没有,没有能力在其上进行本地编译无法运行我们所需要编译器

        2. 有能力进行源代码编译的平台CPU架构或操作系统与目标平台不同

平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心

        要进行交叉编译,我们需要在主机平台上安装对应的交叉编译工具链(cross compilation tool chain),然后用这个交叉编译工具链编译我们的源代码,最终生成可在目标平台上运行的代码。

如:在Linux PC上,利用arm-linux-gcc编译器,可编译出针对Linux ARM平台的可执行代码。

二、交叉编译工具链的安装

  • OrangePi_Zero2交叉编译工具链安装

详情参考OrangePi_Zero2用户手册Orange Pi Zero2-Orange Pi官网-香橙派(Orange Pi)开发板,开源硬件,开源软件,开源芯片,电脑键盘

  •  树莓派交叉编译工具链安装

下载地址:https://github.com/raspberrypi/

unzip tools-master.zip  解压

cd /home/CLC/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

pwd获得路径

echo $PATH 获得当前环境变量的值

2.1 临时有效,配置环境变量

PATH 环境变量

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.2 永久有效,配置环境变量

修改工作目录下的.bashrc 隐藏文件,配置命令终端的
         vi /home/CLC/.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 /home/CLC/.bashrc 加载配置文件,马上生效配置。

三、交叉编译

检查下交叉编译工具对不对:

arm-linux-gnueabihf-gcc -v

编译:

arm-linux-gnueabihf-gcc  xxx.c -o xxx

把编译生成的可执行文件下载到开发板:

scp clientInPi pi@192.168.43.30:/home/pi
指令  文件名  开发板用户名@开发板地址:开发板的绝对路径

四、带wiringPi库的交叉编译如何进行

1. 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。

2. 通过-I -L来指定

arm-linux-gnueabihf-gcc demo.c -I /home/CLC/lessonPI/WiringPi/wiringPi -L. -lwiringPi

把树莓派的wringPI库拿上来用

 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值