交叉编译详细版总结

简介: 交叉编译详细版总结

1.交叉编译

交叉编译:在一个平台生成另外一个平台可执行的代码。


编译:在一个平台上生成在该平台上的可执行代码。


C51/32 交叉编译发送在Keil(集成环境上面),windows上面编写51/32代码 ,不是在windows上面运行


在ubuntu上面编写树莓派的代码,并且编译成可执行代码,如a.out


2.为什么要交叉编译?

有时候平台上不允许或者不能够安装我们所需要的编译器,目标平台上的资源匮乏,无法运行我们需要的编译器, 比如C51、STM32


树莓派也需要也需要交叉编译,有时因为平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器,操作 系统也是代码,也需要编译。


宿主机(host):编译和编译程序的平台,一般是基于x86的PC机,通常也被称为主机。


目标机(target):用户开发的系统,通常都是非x86的平台,host编译得到的可执行代码在target上面运行


交叉编译需要用的工具:交叉编译器、交叉编译工具链


3.交叉编译工具链的安装

获取源码:https://github.com/raspberrypi/


从共享文件夹拷贝到工作目录


cp /mnt/hgfs/share/tools-master .


解压交叉编译工具链


unzip tools-master.zip


pwd获得路径


echo $PATH


获取当前环境变量的值


1.临时有效配置环境变量

PATH环境变量:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/zgl/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

2.永久有效配置环境变量

修改工作目录下的.bashrc 隐藏文件,配置命令终端

vi /homg/zgl/.bashrc

在文件结尾加入 脚本指令:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/zgl/lessonPI/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

保存退出后输入命令


source /home/zgl/.bashrc


加载配置文件,马上生效


3.交叉编译Linux应用开发项目


交叉编译:


输入命令 arm-linux-gnueabihf-gcc -v


检查arm-linux交叉编译工具链版本 4.8.3

scp把文件从ubuntu传输到树莓派

scp xxx 开发板用户@开发板地址:开发板绝对路径

scp把文件从树莓派传输到ubuntu

09d1803a2ba88430ef6b26aa30feaa58_6b7c72f4c49845bebcf3fe0e91943239.png

 

image.png


image.png


image.png

软链接消失


4. 带wiringPi库的交叉编译如何进行

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

2. 通过-I -L来指定


因为链接的库的格式不对,是宿主机的平台,出现以下错误

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

/home/CLC/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


解决方法:把树莓派的wiringPI库拿上来用


输入命令:ln -s libwiringPi.so.2.50 libwiringPi.so (-s 是代号(symbolic)的意思)

软链接


相关文章
|
Linux 开发者
交叉编译工具链的下载与安装
交叉编译工具链的下载与安装
4466 1
|
Ubuntu NoSQL IDE
树莓派开发笔记(二):qt开发环境搭建:树莓派qt编译和宿主机qt交叉编译
树莓派开发笔记(二):qt开发环境搭建:树莓派qt编译和宿主机qt交叉编译
树莓派开发笔记(二):qt开发环境搭建:树莓派qt编译和宿主机qt交叉编译
|
算法 网络安全 数据安全/隐私保护
|
5月前
|
监控 Docker 数据库管理
闲鱼秒拍脚本,自动捡漏工具,python低价筛选最新筛选
本文介绍一套基于Python的闲鱼自动化秒拍系统,涵盖请求签名逆向、异步监控、智能筛选、去重、Selenium自动下单及多渠道通知等完整链路。技术栈含aiohttp、selenium、hashlib等,强调学习研究用途,附详细部署与风控注意事项。(239字)
1429 1
树莓派换源教程 树莓派4B换源教程
树莓派换源教程 树莓派4B换源教程
1972 2
|
Java Linux 网络安全
树莓派的开发环境搭建教程
本教程详细介绍如何在树莓派上搭建开发环境,包括系统安装、配置网络、设置开发工具等步骤,适合初学者快速上手。
1554 7
|
虚拟化
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
9991 0
VMware Workstation 无法连接到虚拟机。请确保...【解决办法】
|
Linux 网络安全 数据安全/隐私保护
Jetson 学习笔记(十三):SSH远程登录控制(终端控制和图形界面)-成功通过
这篇文章介绍了如何通过SSH命令行和VNC图形界面远程登录和控制NVIDIA Jetson Nano设备。
3636 0
Jetson 学习笔记(十三):SSH远程登录控制(终端控制和图形界面)-成功通过
|
Ubuntu 安全 网络协议
用QEMU模拟运行uboot从SD卡启动Linux
用QEMU模拟运行uboot从SD卡启动Linux
1408 0

热门文章

最新文章