编译工具链和交叉编译工具链简易说明

2023-11-08

编译工具链

做C/C++开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容。

C/C++的程序需要经过 gcc 等编译成二进制程序才能被计算机使用,这里的 gcc 通常是泛指,包括 gcc 、 g++ 、ar 、as 、ld 等一系列工具,这些工具用在程序文件的预编译、编译、链接等整个过程中,这整一套工具就被称为 编译工具链(Toolchain)

通常我们说gcc、g++是具体某一个功能的工具,事实上通常它完整的名称都比较长:
在这里插入图片描述
上图是两个不同的编译工具链,可以看到两者最大的区别就是文件名前面部分的字段,这部分字段通常会遵循一定的规则 —— arch[-vendor][-os][-abi]这里的各个字段都是针对 目标平台 而言的(就是编译生成的程序最终运行的平台),各字段说明如下:

  • arch 目标CPU架构
    目标cpu架构比如aarch64、arm、x86、riscv等,这个字段通常不会省略;
  • vendor 提供此编译工具链的厂商名称或是厂商特定信息
    这个字段只是标识信息,没有实际意义,可以为 none 、 unknow 或是直接省略;
  • os 目标设备上运行的操作系统
    这个字段常见的就 linux 和 none 两个, none 基本都是用于裸机程序的, linux 指编译出的程序是运行在 linux 上的,可以使用系统线程进程等函数;
  • abi 应用程序二进制接口(Application Binary Interface)
    这个字段常见的值就比较多了,比如 abi 、 eabi 、 gun 、 gnueabi 、 gnueabihf 、 uclibc、 uclibcgnueabi 等;
    eabi 指嵌入式应用程序二进制接口((Embedded Application Binary Interface));
    gun指使用的库为 glibc , uclibc 使用的库为 uclibc ;
    hf 指默认编译参数支持硬件浮点功能;

交叉编译工具链

前面介绍了编译工具链的命名规则中主要体现了 目标平台 的一些信息,另外也介绍了编译工具链就是一系列的软件集合。这里就牵扯出另一个问题了,我们知道 windows 上的程序只能在 windows 上运行,macos 上的程序只能在 macos 上运行,linux 上的程序只能在 linux 上运行。所以就算是同一目标平台的编译工具链也可能分为运行在 windows 上的版本、运行在 macos 上的版本或是运行在 linux 上的版本等等。很多时候编译工具链的 运行平台 和 目标平台 是不一样的,所以就有 交叉编译工具链(Cross Toolchain) 这一说法了。

交叉编译工具链可以使用 crosstool-ng 这类工具自己编译生成,不过更常见的直接使用现成的。通常芯片或是开发板厂家都会提供交叉编译工具链或是整合了交叉编译工具链的SDK等。此外还有很多提供通用交叉编译工具链的机构或组织,可以从这些地方下载。这些下载的交叉编译工具链文件命名通常包含 目标平台 和 运行平台 信息,目标平台信息格式基本遵循前面描述,运行平台信息格式就比较随意了,下面将列举一些进行介绍。

现在热门的arm架构芯片编译工具链最常用的下载站点是下面这个:
在这里插入图片描述
http://releases.linaro.org/components/toolchain/binaries/
https://snapshots.linaro.org/gnu-toolchain/

下面是这个站点提供的一些交叉编译工具链,后面括号中的是我补充的注释:
gcc-linaro-7.5.0-2019.12-i686-mingw32_aarch64-linux-gnu运行在x86和x64架构上的windows系统中
gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf运行在x86和x64架构上的linux系统中

除了上面网站外对于arm架构芯片,arm官网也有提供交叉编译工具链:
在这里插入图片描述
下面链接提供的是面向 Cortex-A 系列的交叉编译工具链:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

gcc-arm-10.3-2021.07-mingw-w64-i686-arm-none-eabi (运行在x86和x64架构上的windows系统中)
gcc-arm-10.3-2021.07-x86_64-arm-none-linux-gnueabihf运行在x86和x64架构上的linux系统中
gcc-arm-10.3-2021.07-aarch64-arm-none-linux-gnueabihf运行在64位arm架构上的linux系统中

下面链接提供的是面向 Cortex-R 和 Cortex-M 系列(主要就是单片机啦)的交叉编译工具链:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads

gcc-arm-none-eabi-10.3-2021.10-win32 (运行在x86和x64架构上的windows系统中)
gcc-arm-none-eabi-10.3-2021.10-x86_64-linux(运行在x86和x64架构上的linux系统中
gcc-arm-none-eabi-10.3-2021.10-mac (运行在mac系统中)

最后再提下版本号:
通常来说交叉编译工具链的版本号和编程语言语法版本和库版本有关,越新的交叉编译工具链就支持越新的语法和库。高版本的交叉编译工具链通常会兼容低版本的语法规则。一般的如果项目有指定交叉编译工具链的版本就用指定的版本,如果没有就选择新一些的版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编译工具链和交叉编译工具链简易说明 的相关文章

  • 再介绍一种低成本的负电源电路

    前面介绍了几种产生负电源的方法 几种常用的产生负电源的方法 今天再来介绍一种低成本的负电源电路 用分离元件搭建 配合程序控制 实现正电源转负电源 先看电路 图中Q1 D1 L2和C1构成最基本的Buck Boost电路 L1 C2为一级LC
  • modbus总线协议(一)modbus rtu

    一 介绍 Modbus协议由Modicon公司开发出来 现在Modbus是工业领域全球最流行的协议 硬件支持RS 232 RS 422 RS 485和以太网设备 应用在PLC DCS 智能仪表等工控领域 图片来源于网络 二 modbus协议
  • 嵌入式杂谈之中断向量表

    虽说接触了好久的单片机或者说嵌入式开发 不过对于有些概念还是比较模糊 因此此系列将会从一些零碎的小知识点出发 慢慢的遍历整张嵌入式开发的地图 这次先来看一下中断向量表 至于为什么会提到中断向量表 主要是因为我自己在学习嵌入式Linux开发的
  • stm32USB之模拟U盘

    STMF0 W25Q32模拟U盘 1 第一次写博客 如有错误 请及时指正 如有表达不通顺的地方 敬请谅解 2 本篇文章主要描述如何使用STM32cube配置USB 使用的主控为STM32F072 Flash为W25Q32 使用的主控RAM只
  • 新唐NUC980使用记录(5.10.y内核):u-boot & linux & rootfs 编译与烧录测试(基于SD1位置SD卡)

    文章目录 目的 基础准备 烧录环境 开发编译环境 SD卡分区 制作和设置编译工具链 制作toolchain和rootfs 拷贝rootfs内容到SD卡 设置编译工具链 u boot编译与测试 下载 配置与编译 烧录u boot与环境变量 l
  • verilog奇数分频器的问题讲解(7分频为例)

    先不多哔哔 直接上代码 verilogHDL 代码的后面讲原理 module fenpin3 clk clk7 rst input clk rst 设置rst的目的是当rst 1的时候给cnt0和cnt1赋初值 output clk7 re
  • 计算机毕业设计项目大全

    文章目录 0 前言 1 java web 管理系统 毕设选题 2 java web 平台 业务系统 毕设选题 3 游戏设计 动画设计类 毕设选题 适合数媒的同学 4 算法开发 5 数据挖掘 毕设选题 6 大数据处理 云计算 区块链 毕设选题
  • HMI智能串口屏——在STM32开发板上的实战应用及其详解

    HMI智能串口屏 在STM32开发板上的实战应用及其详解 一 HMI智能串口屏使用步骤 二 附录 一 HMI智能串口屏使用步骤 安装USART HMI软件 一般买的串口屏里面 商家送的资料里面都有改该软件 打开软件 并点击左上角的 新建 选
  • LWIP在STM32上的移植

    本文做记录摘抄 加上自己的体会 文章标题 STM32使用LWIP实现DHCP客户端 http www cnblogs com dengxiaojun p 4379545 html 该文章介绍了几点 LWIP源码的内容 关键点 1 inclu
  • 通过External Tools在STM32CubeIDE下使用DAP-LINK

    目录 一 文章背景 二 准备工作 2 1 Stm32CubeIDE 2 2 DAP LINK 2 3 STM32目标板 三 配置过程 3 1 连接目标板 3 2 配置仿真器 3 3 更改调试设置为远程调试 3 4 新建OpenOcd扩展工具
  • DevC++如何改成中文?

    DevC 如何改成中文 1 点击Tools工具 2 选择环境选项 3 选择简体中文 4 点击确定
  • 解决Keil调试模式下无法设置断点的问题

    问题描述 使用Keil打开工程文件 进入调试模式后 只有main c文件里面可以设置断点 其余文件都不可以设置断点 可能的原因及解决方案 原因1 工程路径包含中文 解决方案1 更换为全英文路径 原因2 工程没有全部Rebuild 解决方案2
  • [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL s...

    Err 1064 You have an error in your SQL syntax check the manual that corresponds to your MySQL server version for the rig
  • 物联锁项目失败原因分析

    一 背景 2022年3月份接手IM024物联锁项目救火 此项目主要用于医院共享轮椅 共享病床 此项目是从2021年初开始立项开发 投入了大量的人力物力 但是在2022年3月份时产品工作仍然不稳定 此项目基本上可以判定为一个失败的典型 为了吸
  • FreeRTOS中断管理

    目录 说明 一 中断基础 1 1 中断理解 1 2 中断执行步骤 1 3 中断寄存器选择位 1 4 中断优先级分类 二 中断优先级分组设置 2 1 分类 2 2 特点 三 中断有关寄存器 3 1 SHPR1寄存器 3 2 SHPR2寄存器
  • 3559摄像头

    input aoni Webcam as devices platform soc 12310000 xhci 1 usb1 1 1 1 1 1 0 input input0 yuv转 的代码 https github com 198708
  • Java的引用类型有几种?区别是什么?

    nbsp Java的引用类型有几种 区别是什么 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复
  • Java语言真的跌落神坛了吗?

    Java语言真的跌落神坛了吗 在开始前我有一些资料 是我根据自己从业十年经验 熬夜搞了几个通宵 精心整理了一份 Java的资料从专业入门到高级教程 工具包 点个关注 全部无偿共享给大家 在评论区回复 888 之后私信回复 888 即可拿走
  • 锂电池管理系统(BMS)

    引言 在现代科技的推动下 锂电池已经成为各种电动设备和能源存储系统的首选能源媒介 然而 锂电池在充电和放电过程中存在一系列潜在的安全隐患 同时其性能和寿命也受到一些限制 为了解决这些问题 锂电池管理系统 BMS 应运而生 BMS不仅仅是一个
  • 48V转12V的DC-DC稳压电路推荐

    项目或学习过程中好用且稳定的DC DC的电路将是一个成功硬件项目的基础 主芯片 MP9486 MP9486A 是一款高压降压型开关稳压器 可输 出高达 1A 的持续电流至负载 它集成了一个高 压高端 MOSFET 提供 3 5A 的典型峰值

随机推荐

  • 人工智能数据标注案例之人脸识别案例

    人工智能是未来的发展趋势 人脸识别是人工智能应用最为广泛的一项技术 在现实生活中 我们使用的支付宝 微信的安全验证 智能手机的人脸解锁功能等都运用到了人脸识别 作为人工智能发展的三大要素之一 数据的作用不可小觑 其中数据采集与数据标注是数据
  • MATLAB图像识别技术在棉花叶面病虫害识别上的

    MATLAB图像识别技术在棉花叶面病虫害识别上的应用 摘 要 棉花是新疆地区种植最为广泛的经济作物 利用MATLAB图像识别技术将相机采集到的患病棉花叶面经过图像灰度化 图像增强 图像二值化 图像形态学处理 图像填充 图像分割等预处理后用函
  • C语言数组第十课---------------三子棋-------数组经典练手题

    作者前言 作者介绍 作者id 老秦包你会 简单介绍 喜欢学习C语言和python等编程语言 是一位爱分享的博主 有兴趣的小可爱可以来互讨 个人主页 小小页面 gitee页面 秦大大
  • 使用MATLAB GUI实现运动目标追踪

    使用MATLAB GUI实现运动目标追踪 物体追踪是计算机视觉中的一个重要研究领域 它可以应用于自动驾驶 智能监控等多个领域 本篇文章将介绍如何使用MATLAB GUI实现运动目标的追踪 并给出相应的源代码 前置知识 在开始之前需要掌握以下
  • 程序静态分析第一课

    程序静态分析第一课 该课程主要内容来自北京大学熊英飞老师的 软件分析技术 事例一 飞机为了保证飞行安全 在很多设备上会设置冗余设备 一般来说都是一主二备三应急 一架飞机上同样功能的设备设施 会安装起码三套或更多来应付其中一套出故障而导致飞机
  • pe中怎么卸载服务器系统更新,如何卸载win7系统更新用pe装win7

    缺省设置 724 512M物理内存 改变命令 代码如下 sysctl w vm vfs cache pressure 200 sysctl w vm min free kbytes 1024 通过本次的分享我们在使用参数优化的时候遇到的问题
  • html标签(下)----常用高级标签

    下列代码可直接运行 br br br br br 空 nbsp nbsp nbsp 格 div style width 400px height 60px background color darkgrey div
  • Oracle锁机制

    增删改查中查询不需要锁 即使数据被锁定也能在还原信息中查询出锁定之前的值 其余三项均会使用行级锁 直到用户commit或rollbak 锁是在指定语句的最低可能级别自动获取的 增删改获取行级锁而不是块级或表级 修改对象 如移动表 会获取对象
  • 朝代官制,6部是什么

    六部 六部就是我们所熟知的 吏 户 礼 兵 刑 工 它是隋唐以来中央行政机构中的重要一极 隋唐开创的三省六部制最早可以追溯至西周时期 但史料对此记载颇少 当时相应的中央行政机构所管辖的职能远远没有后世开创的六部职能完善 秦朝开创了三公九卿制
  • 星际争霸2神族全兵种介绍

    星际争霸2神族全兵种介绍 貌似很多兵种啊 而且根据目前的demo 兵种相克非常明显的话游戏节奏可能变慢 不知道可玩性会不会像1那么高 星际2神族全兵种公布 2007 6 18 作者 OGame NeT Sodoes 更多精彩尽在神州论坛 翻
  • 一个在终端实现类Linux shell(cd ls命令)UI界面的项目(C语言实现)

    一个在终端实现类Linux shell cd ls命令 UI界面的功能 C语言实现 这2天做了一个类似Linux shell的UI界面 目前已初步完成cd ls help pwd quit等命令 在Linux下实现 效果图见下图 ls命令
  • websocket深入浅出

    websocket简介 websocket是什么 答 它是一种网络通信协议 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议 为什么需要websocket 疑问 我们已经有了 HTTP 协议 为什么还需要另一个协议
  • [STM32WBA]【STM32WBA52CG测评】-3- 蓝牙BLE:LED与button例程分析

    STM32WBA52CG是支持蓝牙BLE 5 3 官方提供的STM32Cube FW WBA V1 1 0资料包中提供了一个非常好的入门案例 BLE p2pServer 准备材料 Keil ST BLE Toolbox 图形化配置时钟 主要
  • QT安装mqtt环境(这里默认以及有了QT)

    首先 QT的版本和mqtt包的版本要一致 我这里QT和mqtt的版本都是5 14 2 QT安装包 5 14 2 下载地址 Index of archive qt 5 14 mqtt包的一个连接 可以选择相应的版本 GitHub qt qtm
  • eclipse easyui 正常代码老是报错 红色波浪线

    即使交换位置 手敲行依旧报错 看了三篇 还是看不出问题 关于正确代码会出现很多红色波浪线 网上的办法是把eclipse软件关闭 然后重新启动即可消除 但是这种方法有个弊端 当再次编辑的时候依旧很出现很多波浪线 尝试了以下两种方法 https
  • Retrofit 2.5 框架使用与源码分析

    Retrofit 2 5 框架使用与源码分析 Retrofit 框架使用 请求内容与返回值 使用PostMan进行请求测试 请求 https api github com search repositories q android 返回值
  • 【计算机视觉

    文章目录 一 检测相关 7篇 1 1 Vehicle Occurrence based Parking Space Detection 1 2 Squeezing nnU Nets with Knowledge Distillation f
  • LeetCode--Intersection of Two Linked Lists (两个链表的交点)Python

    题目 给定两个链表 求这两个链表的交点 若没有交点 则返回空 样例如下 返回交点c1 解题思路 思路1 暴力思路 n方复杂度 对两个链表分别进行遍历 找到相同的节点即可O n m 空间复杂度为O 1 思路2 使用哈希表 即python中的字
  • 6-6 找素数并保存到数组中

    本题目要求查找n m之间所有素数 存入一维数组a中 函数接口定义 int fun int n int m int a 其中 a 为存储的素数 函数返回素数的个数 裁判测试程序样例 include
  • 编译工具链和交叉编译工具链简易说明

    文章目录 编译工具链 交叉编译工具链 编译工具链 做C C 开发特别是嵌入式方向的肯定会涉及编译工具链和交叉编译工具链相关内容 C C 的程序需要经过 gcc 等编译成二进制程序才能被计算机使用 这里的 gcc 通常是泛指 包括 gcc g