交叉编译详细版总结

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

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)的意思)

软链接


相关文章
|
Ubuntu Linux 编译器
Linux应用开发基础知识——交叉编译与gcc编译(一)
Linux应用开发基础知识——交叉编译与gcc编译(一)
770 0
Linux应用开发基础知识——交叉编译与gcc编译(一)
|
机器学习/深度学习 缓存 并行计算
NVIDIA Tesla GPU系列P4、T4、P40以及V100参数性能对比
NVIDIA Tesla系列GPU适用于高性能计算(HPC)、深度学习等超大规模数据计算,Tesla系列GPU能够处理解析PB级的数据,速度比使用传统CPU快几个数量级,NVIDIA Tesla GPU系列P4、T4、P40以及V100是Tesla GPU系列的明星产品,云服务器吧分享NVIDIA.
84027 1
|
6月前
|
存储 机器学习/深度学习 缓存
vLLM 核心技术 PagedAttention 原理详解
本文系统梳理了 vLLM 核心技术 PagedAttention 的设计理念与实现机制。文章从 KV Cache 在推理中的关键作用与内存管理挑战切入,介绍了 vLLM 在请求调度、分布式执行及 GPU kernel 优化等方面的核心改进。PagedAttention 通过分页机制与动态映射,有效提升了显存利用率,使 vLLM 在保持低延迟的同时显著提升了吞吐能力。
2894 19
vLLM 核心技术 PagedAttention 原理详解
|
编解码 自然语言处理 机器人
通义千问Qwen2-VL开源,API可直接调用!
通义千问宣布开源第二代视觉语言模型Qwen2-VL,并推出2B、7B两个尺寸及其量化版本模型。同时,旗舰模型Qwen2-VL-72B的API已上线阿里云百炼平台,用户可直接调用。
6378 10
|
监控 安全 测试技术
现在公司都在用的CI/CD框架到底是什么?
现在公司都在用的CI/CD框架到底是什么?
5821 1
|
机器学习/深度学习 JSON API
【Python奇迹】FastAPI框架大显神通:一键部署机器学习模型,让数据预测飞跃至Web舞台,震撼开启智能服务新纪元!
【8月更文挑战第16天】在数据驱动的时代,高效部署机器学习模型至关重要。FastAPI凭借其高性能与灵活性,成为搭建模型API的理想选择。本文详述了从环境准备、模型训练到使用FastAPI部署的全过程。首先,确保安装了Python及相关库(fastapi、uvicorn、scikit-learn)。接着,以线性回归为例,构建了一个预测房价的模型。通过定义FastAPI端点,实现了基于房屋大小预测价格的功能,并介绍了如何运行服务器及测试API。最终,用户可通过HTTP请求获取预测结果,极大地提升了模型的实用性和集成性。
850 1
|
Ubuntu 安全 网络协议
|
传感器 芯片
嵌入式通信协议全解析:SPI、I²C、UART详解(附带面试题)
通信是指人与人或人与自然之间通过某种行为或媒介进行的信息交流与传递。从广义上来说,通信是指需要信息的双方或多方在不违背各自意愿的情况下采用任意方法、任意媒质,将信息从某方准确安全地传送到另方。在出现电波传递通信后,通信被单一解释为信息的传递,是指由一地向另一地进行信息的传输与交换,其目的是传输消息。通信方式包括利用“电”来传递消息的电信,这种通信具有迅速、准确、可靠等特点,且几乎不受时间、地点、空间、距离的限制,因而得到了飞速发展和广泛应用。
4643 0
|
编译器 开发工具 C语言
vscode安装+配置+使用+调试【保姆级教程】
vscode安装+配置+使用+调试【保姆级教程】
58562 9