1. 编译工具链基本介绍

C/C++程序需要编译成二进制的机器码才能被CPU识别运行,而编译程序就需要用到编译器,比如我们常用的gcc编译器。

gcc编译器,其实只是编译工具链的其中一个工具而已,实际上整个编译工具链包含了:gcc(c编译器)、g++(c++编译器)、ar(ar打包工具,制作静态链接库)、as(汇编器)、ld(链接器)等等一系列的工具,所有的工具集合就被叫做交叉编译工具链。

对于嵌入式开发来说,因为我们运行代码的平台并不是电脑,而是其他架构的SoC,比如ARM架构的芯片。但是我们开发过程却是在电脑上开发,所以我们需要的事交叉编译工具链。比如下面的一些交叉编译工具:

这些工具都有前缀字段,他们有通用的命名规则:arch - vendor - os - abi ,其中:

arch:表示目标平台的CPU架构,比如上面写的就是ARM架构

vendor:这个单词指的是供应商。一般这个字段可以标识工具链由那个芯片厂商制作的,或者这个工具链可以编译哪颗厂商的CPU。这个字段基本都是不写(比如上面的截图)、或者写为none,这样就表示可以适用ARM架构的所有CPU。

os:这个字段表示目标平台运行的操作系统。常见的会写linux、none。一般来说none的工具链都是用于编译裸机程序的。写linux则编译的程序是运行与linux系统上,当然这个字段就算写着linux,也是可以编译裸机程序的。

abi:就是Application Binary Interface(应用程序二进制接口)英文的缩写。这个字段常见的有:abi、eabi、gnu、gnueabi、uclibc等等。其中gnu是指使用glic库,eabi是指Embedded Application Binary Interface(即嵌入式应用程序二进制接口)。

2. 获取交叉编译工具链

  1. 自己制作

    交叉编译工具链,我们可以使用 crosstool-NG 这类工具,自己制作。

  2. 在一些机构或者开源组织下载

    一般可以从这个网站上下载:https://www.linaro.org/downloads/

  3. SoC厂商或者开发板厂商提供

    通常芯片厂商或者开发板厂商都会提供该芯片的SDK,里面就包括了交叉编译工具链,在实际开发中,也是推荐使用SoC厂商提供的工具链,因为我们使用了不同版本的工具链,编译内核、应用程序可能会出现不兼容的问题。

3. 安装交叉编译工具链

对于眺望科技开发板提供的交叉编译工具链在 .\Core-A9核心板光盘资料\2.软件开发参考资料\1.编译工具 这个位置。下面以这个工具链为例进行安装。

  1. 现在linux下创建个文件夹用于存放交叉编译工具链。这里我在home目录下创建一个toolchain文件夹存放,我们在其他目录存放也是一样的。

    mkdir toolchain
    
  2. 把工具链弄进linux里面。把文件放到linux里面的方法有很多,可以参考这篇博文:https://blog.csdn.net/luobeihai/article/details/124003483 写的方法,非常详细。这里我就用 FileZilla 工具进行传输。如下:

  3. 解压安装包

    tar -zxvf arm-poky-linux-gnueabi-gcc-5.3.0.tar.gz
    

    解压完成后,在当前目录下多了一个目录,就是我们刚刚解压出来的。如下:

  4. 安装完之后测试

    交叉编译工具链在解压完成之后,就相当于安装完成了的。安装完成之后的交叉编译工具链就在 ./fsl-imx-fb/4.1.15-2.0.1/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi 这个目录下。我们进入到这个目录,可以看到里面有如下文件:

    上面这些就是工具链的各种工具集合。

    我们运行工具链的下面命令,就会打印出版本等信息,这样就说明安装成功了。

    arm-linux-gnueabihf-gcc -v
    

4. 设置工具链的PATH环境变量

当解压完成之后,实际上我们就可以运行这个工具链进行编译程序了,但是如果我们不在工具链的当前目录下运行工具链编译程序的话,linux系统就会报错说找不到这个程序。原因很简单,就是系统运行程序的查找路径不包括我们刚刚安装工具链的路径,所以我们需要把这个路径添加到PATH的环境变量中去。

可以执行下面命令打印linux系统PATH环境变量:

echo $PATH

执行完后,打印出的环境变量如下:

可以看出,并没有我们安装的交叉编译工具链的路径。下面接收如何添加PATH环境变量。

方法一:直接export导出PATH环境变量

只要输入如下命令即可:

export PATH=/home/twdz/toolchain/fsl-imx-fb/4.1.15-2.0.1/sysroots/i686-pokysdk-linux/usr/bin/arm-poky-linux-gnueabi:$PATH

导出了环境变量之后,我们就可以在任何目录下运行工具链的编译命令了。

但是注意这种方法,只对当前的终端有效,如果你关闭了这个终端在重新打开,就需要再次运行这个命令。

方法二:修改 .bashrc 文件

要想设置的环境变量永久生效,就在用户的宿主目录(就是各个用户的home目录)下,有一个 .bashrc 的隐藏文件,如下:


如果没有这个文件的话,自己创建这个文件即可。

我们把上面的那句命令,添加到 .bashrc 文件的末尾即可。输入如下命令打开这个文件:

vi .bashrc

然后添加 export 的那句命令即可。如下:

这样子设置的交叉编译工具链的 PATH 环境变量就永久生效了。注意你设置的是哪个用户的 .bashrc 文件,则这个用户就是永久生效的。如果你切换了用户,那么就不起作用了。

交叉编译工具链的安装和配置过程相关推荐

  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. Omap - SDK和工具链的安装&配置

    OMAP的开发目前还没有集成开发环境,所以需要自己去下载其开发套件,然后自己搭建软件环境.所以过程可能会比较烦琐但不会复杂,可以参考文献DVSDK_INSTALL_DIR/PSP_SDK_INSTAL ...

  5. 交叉编译工具链的安装

    你有一块尘封多年的开发板,吹口气,尘土飞扬.最近买了一台崭新的电脑,脑子抽风想在开发板子上练练手. 1.安装linux开发环境 1.1.windows端安装虚拟机,在虚拟机上安装linux操作系统.w ...

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

    1.进入树莓派官网 网址:https://github.com/raspberrypi/ 下载资源: (1)点击tools (2)下载压缩的文件 2.在虚拟机上新建文件夹 mkdir lessonPi ...

  7. Linux ARM交叉编译工具链制作过程

    一.下载源文件 源代码文件及其版本与下载地址: Binutils-2.19.tar.bz2 http://ftp.gnu.org/gnu/binutils/ gcc-4.4.4.tar.bz2 htt ...

  8. imx6ull项目也是封装成脚本安装 Poky 交叉编译工具链类似ATK-STM32MP157交叉编译

    [正点原子MP157连载]第六章 ATK-STM32MP157交叉编译篇 学习 2021-05-29 10:20887阅读 · 25喜欢 · 3评论 粉丝:17.3万文章:122 关注 正点原子提供了 ...

  9. 【linux系统如何安装arm交叉编译工具链】

    文章目录 前言 一.arm交叉编译器介绍 命名规则 具体编译器 二.Arm GNU Toolchain安装 总结 前言 本文简要介绍arm交叉编译器及工具链的安装方法 一.arm交叉编译器介绍 命名规 ...

  10. 【linux】安装Linux的交叉编译工具链

    1.linux中装软件的特点 linux中安装软件比windows中复杂.linux中安装软件一般有以下几种方法:     第一种:在线安装.譬如ubuntu中使用apt-get install vi ...

最新文章

  1. Tensorflow— tensorboard网络运行
  2. 快速了解什么是自然语言处理
  3. Quake3中的绝对值函数
  4. git查看改变的方法
  5. c语言 百钱买百鸡问题
  6. c语言vc数据类型长度,vc和gcc对C语言数据类型长度的定义
  7. cannot be deleted directly via the port API: has device owner network:floatingip
  8. Python_共轭梯度法与最速下降法之间的比较
  9. 计算机十进制例子,verilog给你举个最简单的例子:以十进制计算为例:14
  10. spring boot +mybatis(通过properties配置) 集成
  11. python从入门到放弃百度云-Python从入门到放弃:概论
  12. CMSIS-RTOS 时间管理之虚拟定时器Virtual Timers
  13. 现代操作系统-原理与实现(上)【银杏书-读书笔记】
  14. lex 词法分析 linux,Lex词法分析器
  15. 【.Net码农】Stream 和 byte[] 之间的转换
  16. excel锁定单元格不能修改_3步让表格只能输入不能修改,保护表格格式,快速搞定数据汇总...
  17. Leetcode 235. Lowest Common Ancestor of a Binary Search Tree
  18. 个人整理的免费的Bootstrap模板
  19. 什么是RPC?RPC好处?常用的RPC框架?
  20. 新闻 华为 鸿蒙,华为鸿蒙系统或6月正式推送升级,手机版已开始小范围推送

热门文章

  1. 杭电数据结构课程实践-哈密顿图的判断
  2. Qt 未找到文件:NMAKE
  3. grads之平均气温场与距平
  4. 二分图最佳匹配(KM算法)学习笔记
  5. 生信技能树课程记录笔记(一)20220523
  6. 考研强化阶段选书怎么选
  7. matlab z变换离散化_Matlab基础教程
  8. Unity 游戏框架之GameFramework和ET对比
  9. android开源系统brvah,Brvah——一个强大的Adapter框架
  10. Android--BRVAH官方使用指南