关于交叉编译的内容总结

一、交叉编译是什么?

交叉编译 是在一个平台上生成另一个平台上的可执行代码。
通俗点讲:我们再windows上面编写C51代码,并编译成可执行代码,如xx.hex, 是在c51上面运行,不是在windows上面运行
我们在ubuntu上面编写树莓派的代码,并编译成可执行代码,如a.out,是在树莓派上面运行,不是在ubuntu linux上面运行

编译:是在一个平台上生成在该平台上的可执行代码
通俗点讲:C51 、stm32 交叉编译的发生在keil(集成环境上面)

二、为什么要交叉编译

平台上不允许或不能够安装我们所需要的编译器比如C51
原因: 因为目的平台上的资源贫乏,无法运行我们所需要编译器
树莓派是不是就不需要交叉编译?
错。也要 树莓派有时又是因为目的平台还没有建立,连操作系统都没有,根本谈不上运行什么编译器。操作系统也是代码,也要编译!

平台运行需要两样至少东西:bootloader(启动引导代码)以及操作系统核心
宿主机(host) : 编辑和编译程序的平台,一般是基于X86的PC机,通常也被称为主机。
目标机(target): 用户开发的系统,通常都是非X86平台。host编译得到的可执行代码在target上运行。

三、交叉编译需要用到什么工具:

交叉编译器、交叉编译工具链

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

安装的是树莓派的交叉编译工具链,不同的平台用的是不同的交叉编译工具链

1、交叉编译工具链的下载:
网址:https://github.com/raspberrypi/
点击tools,点击code,下载Download ZIP
另外这个安装包已经在群里啦,(tools-master)

2、下载好的工具压缩包从windowns移到ubuntu:

  • 从共享文件夹拷贝到工作目录 cp /mnt/hgfs/share/tools-master.zip

  • 解压 unzip tools-master.zip

  • 要用到的连接所在路径: cd (/home/CLC/lessonPI/用户名和文件夹没人都不一样)tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin

怎样能让它在每个路径下都能用:
配置环境变量就可以解决,echo $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(这个环境变量只在此终端有效)
  • 配置永久有效的环境变量:修改工作目录下的.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 加载配置文件,马上生效配置。

如何把编译生成的可执行文件下载到开发板:
scp clientInPi pi@192.168.43.30:/home/pi
指令 文件名 开发板用户名@开发板地址:开发板的绝对路径

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

第一步: 正常我们先要交叉编译wiringPi库,编译出的库适合树莓派,这时候交叉编译可执行程序的试试,链接库的格式也是正确的。
但是我在学习时下载的wiringPi库它无法配置安装,只能在x86平台使用,所以就把树莓派上的wiringPi库拿来用啦
wiringPi库在树莓派的usr/lib/里面,通过scp指令来传wiringPi库,但是scp之后,在宿主机里:libwiringpi.so(软链接) 和libwiringpi.so.2.50 之间的软链接消失(这里要注意一下,在传wiringPi库时一定传软链接链接的库,可通过ls-l |grep wiringPi来查看软链接链接的真正的库)
第二步: 在x86平台上就使用交叉编译工具链通过-I -L来指定库的位置就可以进行正常编译啦。

六、扩展 :软链接/硬链接

参考文章:https://www.cnblogs.com/zhangna1998517/p/11347364.html
1、软链接:
概念:

  1. 软链接文件有类似于Windows的快捷方式。
  2. 在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
  3. -s参数只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间

如何生成:

ln(指令)-s(参数)libwiringPi.so.2.50(要被链接的文件)libwiringPi.so(软链接文件名字)

2、硬链接:

ln(指令)libwiringPi.so.2.50(要被链接的文件)libwiringPi.so(软链接文件名字)

它会在你选定的位置上生成一个和源文件大小相同的文件

交叉编译及交叉编译工具链的安装相关推荐

  1. 交叉编译及树莓派(或其他平台)交叉编译工具链的安装

    交叉编译是什么: 交叉编译是一个行为,是在一个平台上生成另一个平台上的可执行代码. 比如:我们在windows上面编写C51的代码,并编译成可执行代码,如xx.hex,是在C51上面运行不是在wind ...

  2. 树莓派 交叉编译工具链的安装

    1.交叉编译是什么: 2.为什么要交叉编译? 3.交叉编译需要用到什么工具? 4..交叉编译工具链的安装 4.1临时有效 4.2永久有效 安装流程: 1.用file Zilla将tools-maste ...

  3. ZYBOZ7从入门到进阶-5 zyboz7交叉编译工具链的安装

    版权声明:本文为博主原创文章,未经博主允许不得转载.https://blog.csdn.net/a646123070 前面几篇博客,我们已经分别进行了PL端和PS端的点灯实验,并初步实验了PS端先硬件 ...

  4. 交叉编译(交叉工具链)

    一.交叉编译(交叉工具链) 在一个环境下编译生成一个可以在另一个环境中执行的可执行文件的工具 本地编译命令 gcc 实现把高级语言的C文件,翻译成二进制文件 是可以在虚拟机中找到的: which gc ...

  5. 交叉编译知识解析(一) —— 交叉编译和交叉工具链

    一.交叉编译简介 1.什么是交叉编译 1.1 本地编译 解释什么是交叉编译之前,先要明白一个概念:本地编译 我们之前常见的软件开发,都是属于本地编译:在当前的PC下,x86的CPU下,直接编译出来程序 ...

  6. 交叉编译和交叉工具链

    交叉编译和交叉工具链 本地编译: 在你需要运行程序的那台机器上编译 交叉编译: 在其他机器上编译,然后在本地或者另外的机器上运行 交叉编译主要是为了, 1.将所有编译都一起集合统一起来:例如,设置一个 ...

  7. Ariane和riscv-gnu-toolchain工具链的安装

    搭建过程 riscv-gnu-toolchain的安装 (1)下载更新riscv-gnu-toolchain $ git clone https://github.com/riscv/riscv-gn ...

  8. riscv-gnu-toolchain工具链的安装

    riscv-gnu-toolchain工具链的安装 下载工具链 环境配置 下载依赖 编译 验证 下载工具链 一定要记得加–recursive, 这是用于循环克隆git子项目,要不然克隆下来的qemu等 ...

  9. riscv-gnu-toolchain工具链下载安装(unbentu)

    riscv-gnu-toolchain工具链下载安装 一.安装依赖 二.下载riscv-gnu-toolchain 三.编译安装riscv-gnu-toolchain 四.添加环境变量 五.测试安装是 ...

  10. 交叉编译说明:工具链安装和环境变量配置

    目录 一   简单了解交叉编译 ① 什么是交叉编译 ② 为什么需要交叉编译 ③ 宿主机和目标机 二   搭建交叉编译工作环境 ① 安装工具链 ② 配置环境变量 ● 配置临时环境变量 ● 配置永久环境变 ...

最新文章

  1. 在baidu上找到自己
  2. 细节决定成败(竞赛错题经验总结)
  3. Coprime Conundrum 容斥原理
  4. 在 wxWidgets 中播放声音的示例
  5. OpenFOAM并行计算方法
  6. C++中default标识的构造函数的说明
  7. C#操作XML方法详解
  8. 【原创】从罗胖子关于开会的议题说开去
  9. NAR:eggNOG 5—蛋白功能层级注释数据库
  10. PSCC2019常用基础操作
  11. window无法访问此文件夹,请确保输入的文件名是正确的,并且您有权访问此文件夹
  12. 阿里巴巴提示:手动创建线程效果更好
  13. 高可用安装K8s集群1.20.x
  14. aqua在HTML什么颜色,HTML颜色一览
  15. AR+教育:ALVA SYSTEMS把图书馆做成了4D百科全书
  16. java事务 spring事务 分布式事物
  17. Pandas个人最强笔记
  18. 段码屏与串口屏的区别
  19. 在vim中使用查找命令查找指定字符串
  20. 爱因斯坦提出万有引力定律的前因后果

热门文章

  1. 普元eos java_普元EOS 案例
  2. 语音数据增强算法汇总(附代码)
  3. grads插值_grads各类参数设置.pptx
  4. 将长整型IP地址转换成点分十进制
  5. python实现KM算法
  6. 原生ajax请求流程
  7. 破解版全能地图下载瓦片数据以及操作使用方法
  8. Haar特征描述算子与人脸检测
  9. 读阮一峰ES6-对象的新增方法一
  10. 微信小程序播放器实战开发教程