文章目录

  • 编译工具链
  • 交叉编译工具链

编译工具链

做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系统中)

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

编译工具链和交叉编译工具链简易说明相关推荐

  1. 制定交叉编译工具_配置交叉编译工具链-嵌入式Linux

    注意:使用我们提供的Ubuntu映象文件时,请按照我们的目录结构,手动设置交叉编译工具链以及编译的架构环境变量配置,(建议配置为永久生效),这里我们提供了两种交叉编译工具链,分别是buildroot构 ...

  2. 制定交叉编译工具_制作交叉编译工具链的方法总结(详细)

    网上这类文章比较多,但是都不是很具体,刚好有门课结课论文要写这个,所以就总结了一下.以下的过程都是在ubuntu7.10上实际运行过的. 手工制作交叉编译工具 在制作工具开始前先要选好所需要的Binu ...

  3. ubuntu 编译android .img_全网可用交叉编译工具链大全

    本文首次发表在 全网可用交叉编译工具链大全 嵌入式系统业界前辈 @comcat 说: 交叉编译工具链 (Toolchain) 是整个嵌入式软件工业的基础. 是的,交叉编译工具链 是学习处理器指令集.汇 ...

  4. 各种交叉编译工具链的区别

    目录 1 命名规则 2 实例 2.1 arm-none-eabi-gcc 2.2 arm-none-linux-gnueabi-gcc 2.3 arm-eabi-gcc 2.4 armcc 2.5 a ...

  5. linux top交叉编译_ARM Linux交叉编译工具链的制作

    本次是在VMWare虚拟机里安装了CentOS5.2操作系统,并在上面编译自己的ARM交叉编译工具链,下面是相应的步骤: 首先下载crosstool0.43源码包(crosstool-0.43.tar ...

  6. arm hisiv100 linux,hisiv100交叉编译工具链安装

    hisi交叉编译工具链安装 一.         摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...

  7. 全手工制作arm-linux交叉编译工具链《一》-转

    全手工制作arm-linux交叉编译工具链 (Gcc 4.2.1 + Glibc 2.6.1 + Linux 2.6.22.6)<一> 作者:Garfield Trump 仅仅是本人在学习 ...

  8. hisi linux nptl.tar,hisiv100交叉编译工具链安装

    hisi交叉编译工具链安装 一.         摘要: 交叉编译简单的说,就是A机器上编译生成,运行在B机器上.那么在A机器上的编译工具安装,就是本文所要描述的内容. 工欲善其事必先利其器,所以交叉 ...

  9. 交叉编译工具 aarch64-linux-gnu-gcc 安装和ATF编译

    前提:需要linux的操作的操作系统或者在windows上用虚拟机运行linux操作系统的环境 一.交叉编译工具 aarch64-linux-gnu-gcc 安装 介绍: aarch64-linux- ...

  10. 嵌入式linux编译环境搭建,嵌入式Linux之旅——环境搭建篇之交叉编译工具的安装...

    在正式开始学习裸机程序的编写之前,我们还需要安装一下交叉编译工具.何为交叉编译工具?其实就是在x86的ubuntu主机上编译程序,并且可以运行在arm环境的编译工具.而gcc是本地编译工具,这个在我们 ...

最新文章

  1. es6学习笔记(一)
  2. ios 图片居中裁剪_iOS实现图片的缩放和居中显示
  3. 【C#编程基础学习笔记】4---Convert类型转换
  4. centos7安装samba文件服务器,Centos7.7部署文件共享服务Samba
  5. 零基础学python还是c语言-C语言是学python的基础吗?
  6. 基于腾讯AI Lab词向量进行未知词、短语向量补齐与域内相似词搜索
  7. 我成功通过PMP考试的经验与体会
  8. R语言大作业(二):上海市人口普查数据分析
  9. SRCNN中的PSNR计算问题
  10. java flv 转swf_nginx-http-flv-module flv拉流错误整理
  11. MaxCompute基本概念和数据类型
  12. codecademy课程笔记——JavaScript Promise
  13. Python大作业-爬取成都链家租房信息(大作业)源码
  14. 神武4最新服务器,神武4手游 角色转服扩大限服范围
  15. Spring Data Elasticsearch 基本语法及使用
  16. Android开发-视图view讲解
  17. Ivor Horton's Beginning Visual C++ 2008
  18. 18M 超轻量图像识别系统,商品、车辆、人脸识别一网打尽!
  19. python pandas修改列名,Python_Pandas学习笔记02:DataFrame获取列名和修改列名
  20. Python爬虫实战:抓取淘宝MM照片

热门文章

  1. cat3 utp是不是网线_网线UTP-CAT5、UTP-CAT5e、UTP-cat6产品简介讲解
  2. 计算方法实验(二):龙贝格积分法
  3. keil5代码可以下载但无法进行串口通信
  4. 【MODIS数据的下载】
  5. 二分图最大权匹配【KM算法 BFS优化下的真正的O(N3)的KM算法】【KM算法模板】
  6. 网络安全工具100强介绍与下载
  7. 蓝牙模块配置串口通讯
  8. 360安全卫士 免杀
  9. 解决myeclipse html页面乱码问题
  10. 使用Java快速开发一个新闻爬虫项目