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

article/2025/9/18 19:07:17

文章目录

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

编译工具链

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

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


http://chatgpt.dhexx.cn/article/A5emh9Xg.shtml

相关文章

Linux vim分屏,如何切换窗口

1.使用 :vsp 2.若想切换窗口,从左边切换到右边,crtlw 点击两次

alt tab无法切换窗口

alt tab无法切换窗口 1. 在桌面新建 a.txt 文件 2. 在文件中输入下面内容 REGEDIT4 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer] "AltTabSettings"dword:000000013. 将文件改为 a.reg 4. 双击文件, 点击所有确定/是 5.重启电脑

Win7系统怎么改变Alt+Tab切换窗口数量,改变Alt+Tab切换窗口数量的方法

我们在使用Win7电脑办公的时候,常常会需要用到切换窗口的快捷键AltTab,这样可以快速切换不同的程序界面,提高工作效率,但是AltTab切换窗口的数量是固定的,不过我们可以改变这个数量,下面小编给大家介绍Win7…

win10系统使用快捷键无法切换窗口怎么办

但是最近,有win1064位系统用户在使用快捷键切换窗口时发现切换不了,那么碰到win10系统使用快捷键无法切换窗口怎么办呢?今天就为大家介绍win10系统使用快捷键无法切换窗口的解决方法。 快捷键无法切换窗口 1、点击开始菜单,选择运行&#…

Linux中如何上下左右切换窗口

linux中如何上下左右切换窗口 ##第一步 将图中show miniature view勾选中,此时窗口会变成最小显示窗口,此时窗口就可以通过ctrlAlt方向键,进行上下左右切换。 ##第二步 将第一步勾选的show miniature view去掉,此时窗口变得正常&a…

win10 edge切换窗口,取消edge窗口为多个,改为独立窗口

win10系统 edge切屏问题 问题情况 edge切屏的时候会显示edge其他的窗口界面,而不是所有的edge十一个窗口的显示情况 解决方法 第一步 找到设置 第二步 搜索多窗口 点击第一个多任务设置 第三步,找到alttab选项 如下图所示 第四步&#x…

点任务栏不切换窗口_如何使您的任务栏按钮始终切换到最后一个活动窗口

点任务栏不切换窗口 Since Windows 7, apps with multiple open windows are combined into a single taskbar button. Hovering over the button gives you a live thumbnail of every window and you can then click the window you want to work with. 从Windows 7开始,具有…

打开计算机窗口的快捷键是什么,快速切换窗口的快捷键是什么

快速切换窗口的快捷键是什么 使用快捷键能让我们更加快捷地操作电脑,那么快速切换窗口的快捷键是什么呢?下面小编带着大家一起来了解一下吧! 快速切换窗口的快捷键 方法一、AltTab快捷键切换窗口 在使用AltTab快捷键切换窗口时,在…

Win32API编程_切换窗口

所需findwindow, SwitchToThisWindow findwindow 函数原型: FindWindow, LPCTSTR lpClassName, // 窗口类名 LPCTSTR lpWindowName // 窗口名 ); 返回值: 返回获取到的窗口句柄 SwitchToThisWindow 函数原型: VOID Switc…

win7中常用切换窗口4种快捷键使用

平常在使用系统中,我们经常会通过一些快捷键来切换窗口,小编在这里给大家总结下,有哪些切换窗口的快捷键可以用。   1、AitTab这个是大家都知道的切换的快捷方式,按照你使用的顺序切换。   2、WinTab效果更佳,有3D…

如何从官网下载JDK安装包?

下载JDK的安装包。 根据自己的服务器类型,下载相应的jdk版本。这里以linux64位为例介绍,下载的是jdk1.8版本。 步骤:(1)进oracle官网,点击进入Java。 (2)进入以后,找到…

java-jdk下载及安装

1、下载JDK; a、直接官网下载:http://www.oracle.com/; b、或百度网盘: 2、双击安装程序, 一直点下一步就好 3、程序安装完毕后,进行环境变量的配置 Java程序开发会使用JDK的两个命令:javac.e…

【java基础】java的官网和jdk安装和下载

本篇文章主要讲解java初级知识,java的jdk安装和下载。 作者:任聪聪 java 官网介绍 java只有一个唯一官网,下载jdk千万不要通过资源站下载,很有可能会存在隐患。 官网地址:https://www.oracle.com/java/ 切换中文显示的…

JDK的最新版的下载与安装

JDK的最新版的下载与安装 一、JDK概述 JDK全称Java Development ToolKit,是Java语言开发工具包。是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),Java基础的类库和很多java工具。 它不提供具体的开发…

JDK 1.8 官网下载地址(linux / windows)

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到教程。 JDK 1.8 官网下载地址: JDK 1.8 官网下载地址(linuxwindows) 上面连接可以直接点击,连接…

jdk1.7 64位官方下载地址

jdk1.7 64位官方下载地址 平时要新装一个系统环境,或者下载最新的jdk,就需要到oracle官网去下载一个jdk,而目前生产环境都是1.7的环境下开发完成的,需要下载1.7版本的jdk,oracle官方网站的默认下载页面是1.8版本的。面…

如何通过官网下载JDK 每一步详细附图

1.百度搜索oracle(因为jdk是oracle旗下的,所以去找oracle官网) 2.点击带官方字样的链接进入官网,如下 3.点击顶部导航栏的Developer如下,再点击Developer Resource Center(开发人员资源中心,专门供开发人员…

JDK8官网下载和安装详细说明(Windows10系统)

目录 前言一、环境说明二、JDK官网下载1.进入官网2.找到Downloads入口3.找到Java JDK4.进入JDK下载页面5.进入JDK8下载页面6.选择下载的版本 三、JDK安装1.运行exe文件2.点击下一步3.定制安装4.安装公共JRE5.安装中6.安装完成 四、环境变量配置1.点击属性2.点击高级系统设置3.点…

js将字符串转换成数字的四种方法

方法主要有四种 1转换函数、2强制类型转换、3利用js变量弱类型转换、4在字符串前面添加个 1.转换函数 js提供了parseInt()和parseFloat()两个转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对String类型调用这些方法,这两个函数才能正确运行…

React使用jsbarcode条形码插件

今天来记录一下jsbarcode条形码使用方法,希望能给有需要的同学一些帮助,当然也是为了方便自己,哈哈哈~~ 既然是插件,当然是要先安装喽,命令走起~ npm install jsbarcode --save我这…