常用的交叉编译工具链

article/2025/9/18 18:32:01

交叉编译工具链是一种用于在一个平台上编译另一个平台上运行的程序的软件工具集,它通常包括编译器、链接器、汇编器等组件。

交叉编译工具链的命名一般遵循 target-platform-triplet 的格式,例如 arm-linux-gcc 表示用于生成 ARM 平台上 Linux 系统下运行的程序的 GCC 编译器¹。

根据我搜索到的信息,目前主流的交叉编译工具链有以下几种:

  1. Linaro 提供的 ARM 交叉编译工具链,可以到 Linaro 官网 Linaro Releases 去下载已经制作好的交叉编译工具链¹。
  2. yagarto 提供的 ARM 交叉编译工具链,可以到 yagarto 官网 Yet another GNU ARM toolchain 去下载已经制作好的交叉编译工具链¹。
  3. crosstool-ng 是一个用于构建自定义交叉编译工具链的工具,它可以支持多种目标平台和配置选项,可以到 crosstool-ng 官网 crosstool-ng 去下载源码并按照文档进行安装和使用²。
  4. buildroot 是一个用于构建嵌入式 Linux 系统的工具,它可以自动下载、配置、编译和安装交叉编译工具链、内核、根文件系统等组件,可以到 buildroot 官网 Buildroot 去下载源码并按照文档进行安装和使用³。

你可以根据你的需求和喜好选择合适的交叉编译工具链,并按照相应的教程进行获取和安装。希望这些信息对你有帮助。😊
(1) 常用的交叉编译工具链 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/38023312.
(2) 交叉编译工具链(详解) - insistYuan - 博客园. https://www.cnblogs.com/coolYuan/p/9037660.html.
(3) 选择交叉编译链 - 简书. https://www.jianshu.com/p/fe5485a8dae7.
(4) Ubuntu 下搭建 GCC 交叉编译工具链 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/563907000.
(5) 编译工具链 - 知乎 - 知乎专栏. https://zhuanlan.zhihu.com/p/110402378.


交叉编译工具链有以下部分组成1:

  • 编译器(compiler),用于将源代码转换为目标平台的机器码,如gcc、g++等。
  • 汇编器(assembler),用于将汇编代码转换为目标平台的机器码,如as等。
  • 链接器(linker),用于将多个目标文件链接为一个可执行文件,如ld等。
  • 解释器(interpreter),用于在目标平台上执行可执行文件,如gdb等。
  • 库(library),用于提供一些基本的函数和数据结构,如glibc、libstdc++等。

交叉编译工具链的功能是为了编译跨平台体系结构的程序代码而形成的一套完整的工具集,它可以使开发者在一个平台上开发和测试另一个平台上运行的程序2。

交叉编译工具链的使用方法一般是:

  • 下载或者自己构建适合目标平台的交叉编译工具链,并设置好环境变量,如PATH、LD_LIBRARY_PATH等。
  • 使用交叉编译器编译源代码,生成目标文件,如arm-linux-gnueabihf-gcc hello.c -o hello.o
  • 使用交叉链接器链接目标文件,生成可执行文件,如arm-linux-gnueabihf-ld hello.o -o hello
  • 将可执行文件拷贝到目标平台上运行,或者使用交叉解释器在本地模拟运行,如arm-linux-gnueabihf-gdb hello

根据我的搜索结果,gcvo和dump文件是交叉编译工具链中的一些辅助文件,有以下作用:

  • gcvo文件是用于代码覆盖率分析的文件,它记录了源代码中每个基本块的执行次数,可以用于评估测试的质量和完整性1。
  • dump文件是用于程序调试的文件,它保存了程序在某个时刻的内存镜像,可以用于分析程序的运行状态和异常原因。

这些文件的使用方法一般是:

  • gcvo文件需要在编译时加上 -fprofile-arcs 选项,生成对应的gcno文件,然后在运行时加上 -ftest-coverage 选项,生成对应的gcda文件,最后使用gcov工具分析这些文件,生成覆盖率报告1。
  • dump文件需要在程序运行时发生异常或崩溃时自动生成,或者使用一些工具如gdb、procdump等手动生成,然后使用相应的调试器如gdb、windbg等打开这些文件,进行调试和分析 。

常用的交叉编译工具链 

编译新版本的 U-boot和 Linux 内核需要选择比较新的 ARM 交叉编译工具链,如果使用的叉编译工具链版本比较低可能会导致编译不通过。

这里要注意的一点是要根据虚拟机里Ubuntu 系统的位数来选择 64 位的交叉编译器工具链还是 32 位的交叉编译工具链。

1、Linaro 提供的 ARM 交叉编译工具链,可以到 Linaro 官网Linaro Releases去下载已经制作好的交叉编译工具链。

2.yagarto提供的 ARM 交叉编译工具链,可以到 yagarto 官网Yet another GNU ARM toolchain去下载已经制作好的交叉编译工具链。

以Linaro为例:

(1)首先在 Ubuntu 系统中安装相关的标准 C 开发环境库

在 Ubuntu 系统终端执行命令: $ sudo apt-get install gcc g++ libgcc1 libg++ make gdb

(2)完成相关库的安装。安装好相关库后,在/usr/local/目录下新建名为 ARM-toolchain的文件夹用于存放交叉编译工具链。接下来就是下载交叉编译工具链,相关命令如下:

$ cd /usr/local/ARM-toolchain

$ sudo wget http://releases.linaro.org/components/toolchain/binaries/6.1-2016.08/ar-m-linux-gnueabi/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar.xz

$ xz -d gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar.xz

$ tar xvf gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi.tar

(3)接下来需要把交叉编译工具链的路径添加到 Ubuntu 系统的环境变量中去。在/etc/bash.bashrc 文件中添加如下内容:

# Add ARM toolschain path

if[ -d/usr/local/ARM-toolchain/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnueabi

] ; then

PATH=/usr/local/ARM-toolchain/gcc-linaro-6.1.1-2016.08-x86_64_arm-linux-gnuea

bi/bin:"${PATH}"

fi

然后执行 source /etc/bash.bashrc 命令使新的环境变量生效。

(4)安装完成后,我们可以在终端执行 arm-linux-gnueabi-gcc –v 命令来查看交叉编

译工具链的版本信息,如下图所示:

图 1 交叉工具链版本信息

Ubuntu 下搭建 GCC 交叉编译工具链 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/563907000

1. 交叉编译工具链介绍

1.1 交叉编译

本地编译:在当前目标平台下,编译出来的程序,放到当前平台下,就可以运行

交叉编译:在一种平台上编译,编译出来的程序,放到别的平台上运行(编译和运行环境不一样,属于交叉的)

交叉编译是一个和本地编译,相对应的概念。主要和嵌入式开发有关,由于嵌入式系统中的各种资源相对有限,只够嵌入式系统运行的,没太多剩余的资源,所以很难进行直接的本地编译

1.2 交叉编译工具链

编译过程是按照不同的子功能,依照先后顺序组成的一个复杂的流程,如下图:

编译过程包括了预处理、编译、汇编、链接等功能。每个子功能都是一个单独的工具来实现,它们合在一起形成了一个完整的工具集。同时编译过程又是一个有先后顺序的流程,牵涉到工具的使用顺序,每个工具按照先后关系串联在一起,形成了一个编译工具链

交叉编译工具链就是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。同时它隐藏了预处理、编译、汇编、链接等细节,当指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成最终的二进制程序映像(.bin)

注意:严格意义上来说,交叉编译器,只是指交叉编译的gcc,但是实际上为了方便,我们常说的交叉编译器就是交叉编译工具链

1.3 交叉编译工具链命名规则

在使用交叉编译链时,常常会看到下面这样的名字:

arm-linux-gnueabihf-
arm-none-linux-gnueabi-
arm-cortex_a8-linux-gnueabi-
mips-malta-linux-gnu-

这些交叉编译链的命名通常会遵循一定的规则:arch-vender-os-abi,各字段说明如下:

  • arch:目标cpu架构,比如mips、arm、x86、riscv等,该字段通常不会省略
  • vendor:提供此编译工具链的厂商名称或是厂商特定信息,该字段只是标识信息,没有实际意义,可以为none、cross、unknow或是直接省略
  • os:目标设备上运行的操作系统,常见的有linux、none(裸机)等
  • abi:应用程序二进制接口(Application Binary Interface),交叉编译链所选择的库函数和目标映像的规范,该字段常见的值有abi 、eabi(embedded abi)、gun(glibc+oabi)、gnueabi(glibc+eabi)、gnueabihf (hf 指默认编译参数支持硬件浮点功能)等

2. Ubuntu下搭建GCC交叉编译工具链

Ubuntu自带的gcc编译器是针对X86架构的,但是我们要编译的是ARM架构的代码,所以需要一个在X86架构PC上运行,可以编译ARM架构代码的交叉编译器

2.1 下载交叉编译器

本文使用Linaro出品的交叉编译器, Linaro是一间非营利开放源代码软件工程公司,最著名的就是Linaro GCC编译工具链(编译器),其官网可以下载源码

Linaro 网站提供了多种GCC交叉编译工具链,我们使用的是Cortex-A7内核的开发板,因此选择arm-linux-gnueabihf,再根据32/64位系统下载不同版本的编译器,这里选择下载x86_64版本

2.2 安装交叉编译器

⏩ 在Ubuntu中创建目录/usr/local/arm

sudo mkdir /usr/local/arm

⏩ 将下载好的交叉编译器复制到该目录中

sudo cp gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz /usr/local/arm/ -f

⏩ 拷贝完成后在该目录中对交叉编译工具进行解压

sudo tar -vxf gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf.tar.xz

⏩ 打开/etc/profile文件,修改环境变量,在文件末尾添加如下内容

export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin

⏩ 使用交叉编译器,还需要安装如下库

sudo apt-get install lsb-core lib32stdc++6

2.3 交叉编译器验证

使用以下命令查看交叉编译工具的版本号,若安装正确就会显示版本号

arm-linux-gnueabihf-gcc -v

从上图可以看出当前交叉编译器的版本号为4.9.4,说明交叉编译工具链安装成功。使用交叉编译器的命令一般是arm-linux-gnueabihf-gcc
 


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

相关文章

基于cmake的交叉编译工具链

基于cmake的交叉编译工具链 本文转载自:https://segmentfault.com/a/1190000019276315,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有。 一、基本概念 1. 什么是交叉编译 交叉编译是A机器上编译生成,运行在B机…

交叉编译工具链建立与常识

交叉编译工具链的命名规则 arch [-vendor] [-os] [-(gnu)eabi] arch – 体系架构,如ARM,MIPS,对于MIPS可能还分大端模式mips或者小端模式mipsel; vendor – 工具链提供商,可能有的工具链会省去这个字段,…

交叉编译工具链的安装和配置过程

1. 编译工具链基本介绍 C/C程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。 gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:g…

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

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

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版本的。面…