一、gcc

  gcc,GNU Compiler Collection,GNU编译器套件,它最初是专门给GNU操作系统开发的,随着时间推移,现在已经成为了嵌入式领域应用最广泛的c/c++编译器工具。不管是单片机开发还是linux开发,都离不开gcc。主要离不开如下的优点:
  1、支持众多的编程语言,不仅支持c/c++,还支持java,objective-c等语言。
  2、支持主流处理器,有良好的可移植性,例如arm、i386等。
  3、具有丰富的配套工具链支持,从名字可以看出,gcc是一个套件,并不是一个单纯的编译器,故它可以与调试工具gdb等工具配套使用。
  4、性能优秀,gcc编译后生成的代码具有很高的可靠性和运行效率。同时支持并行编译。
  更关键的是gcc是一个交叉平台编译器,他能够在当前CPU平台上为不同体系结构的硬件平台开发软件,尤其适合嵌入式领域。比如单片机开发,用keil工具开发时,使用的就是gcc编译,编译成.bin文件后,烧录到单片机中即可运行。更不用说linux开发,也是同样的道理。
  除了gcc之外,还有clang、Visual Studio等编译器。clang兼容gcc,目标是超越gcc,所以在linux领域和gcc竞争激烈。visual studio是微软的开发工具包,其中包含编译器,一般用于windows下。
  而历史上也出现了很多的编译器,甚至还有一段不得不提的“编译器圣战”历史,但是随着时间的推移,大部分都淹没在历史的长河中。

二、Linaro

  目前在嵌入式领域,绝大部分的芯片都是基于arm技术,而这些芯片又是由arm授权ip给不同的公司开发,这就导致了基于ARM的解决方案和软件体系十分庞大,所以为了解决ARM生态系统中,重复投资造成的资源浪费,2010年6月,由ARM发起,IBM、Freescale、Samsung、ST、TI这6家公司宣布合资成立Linaro的非盈利公司。
  Linaro公司主要关注Linux开源软件中间层和底层软件(内核和工具链等),并不涉及高层应用软件,并且所有的软件均开源。技术方面主要收技术指导委员会(Technical Steering Committee,TSC)控制,它来控制项目的规划和实现。

三、Linaro gcc

  当在linux中编辑完代码后,需要用gcc编译器编译后才能运行。但是ubuntu运行在windows下,所以它自带的gcc编译器是针对X86架构的,编译后的可执行文件也只能在X86架构上运行,但是要运行在arm架构的开发板上必须使用交叉编译工具链进行编译。
  基于arm架构的gcc交叉编译工具链有很多,在Linaro成立以前,比较有名的例如CodeSourcery公司,但在Linaro成立后,推出了gcc-linaro-arm-linux-gnueabihf交叉编译工具链。已经成为目前最常用的工具链。
  到如今2021/6/7号,该工具链的版本已经到了10.2.1。

四、交叉编译工具链命名

1、命名规则
  arch [-vendor] [-os] [-(gnu)eabi]
  解释如下:
  arch:体系架构,例如ARM、MIPS。
  vendor:工具链提供商。
  os:目标操作系统。
  eabi:嵌入式应用二进制接口。
  例如gcc-linaro-arm-linux-gnueabihf,vendor=linaro,os=linux,gnueabihf为最后一部分。
2、gnueabihf
  gnueabihf这到底是什么含义?这个单词应该拆分为3个部分来看,gnu、eabi和hf。
  gnu显然代表了GNU组织。
  abi是二进制应用程序接口,而eabi是嵌入式ABI,故这两者的区别是abi是用于计算机上的,eabi用于嵌入式平台上。
  hf对应于armhf架构,如果不带hf,则对应于armel架构。这两个架构在对待浮点运算采用了不同的策略。所以有时候会看到arm-linux-gnueabi-gcc和arm-linux-gnueabihf-gcc,区别就是对应的arm架构不同。
  最后值得一提的是,arm-gcc可分为支持或不支持操作系统。一般情况下如果不带linux,则表明这是针对裸机的编译器。例如armcc,它是ARM公司推出的编译工具,一般与ARM开发工具一起提供,例如Keil MDK等,开发过ST芯片的工程师一定不陌生。

五、Linaro gcc 安装

  按照正点原子的推荐,这里安装4.9版本的linaro gcc,把该库的压缩包放到/usr/local/arm下,并解压缩。
  打开配置文件,把arm-linux-gnueabihf-gcc的路径添加到环境变量中

sudo vi /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

  LSB,Linux Standard Base,因为linux的发行版非常繁多,LSB促进了它们之间的兼容性,使得各种软件可以很好的在兼容LSB标准的系统上运行。
  lib32stdc++6,即GNU C++标准库。
  如果执行如下命令成功,则说明arm-linux-gnueabihf-gcc可以使用,可以看到版本号违4.9.4。

arm-linux-gnueabihf-gcc -v

环境搭建—3.0 Linaro gcc相关推荐

  1. 分布式存储 CentOS6.5虚拟机环境搭建FastDFS-5.0.5集群

    其实这是一篇来自:http://www.open-open.com/lib/view/open1435468300700.html 个人认为很适合新手参考的文章,感谢原创作者的努力. 分布式存储 Ce ...

  2. 嵌入式linux开发环境搭建(VMware16.0.0+Ubuntu16.04.3_X64)

    目录 一.安装VMware 1.VMware介绍 2.安装VMware16.0.0 二.安装ubuntu16.04.3 LTS 1.Ubuntu介绍 2.下载安装包iso 3.安装 四.新安装Ubun ...

  3. Qt for Android开发环境搭建(QtCreator6.0.1+Qt5.15.2/Qt6.2.2+win10)

    前言 笔者很早就尝试使用Qt开发android程序,不得不承认,当前仍然比较小众.若是想一套代码的跨平台开发,或想要更高的执行效率,Qt值得一试 一.安装Qt 每个人需求不同,会安装不同版本的Qt,笔 ...

  4. 关于FS4412的ARM开发环境搭建并点亮LED灯

    目录 一.ARM开发环境搭建 1.安装 GCC 编译工具 2.安装 Yagarto 工具包 3.安装FS-JTAG调试软件 4.安装JRE 5.安装FS-JTAG驱动 6.安装USB转串口驱动 7.安 ...

  5. Android环境搭建(XP/Win7)

    原文地址为: Android环境搭建(XP/Win7) Android环境搭建 版本记录 版本 修改/创建人 修改/创建时间 备注 V1.0.0 蓝燕 2010年12月28日 建立文档 V1.0.1 ...

  6. win命令安装 安装cmake_win10下VSCode+CMake+Clang+GCC环境搭建教程图解

    打算用C/C++把基本的数据结构与算法实现一遍, 为考研做准备, 因为只是想实现算法和数据结构, 就不太想用VisualStudio, 感觉VSCode不错, 遂在网上找了一些教程, 结合自己的需求, ...

  7. Linux 0.11 实验环境搭建与调试

    缘起 之前我写过一篇博文:Linux 0.11 实验环境搭建 本以为有了这个环境(gcc-3.4 & gdb-6.8),就可以调试无忧了.谁知遇到了以下问题: (1)用 gdb 调试 main ...

  8. Linux 0.11 实验环境搭建

    如果想学习Linux 0.11,实验环境是必不可少的.最好是能编译,能运行,能调试. 如今大家都是用64位的Linux操作系统,而且是高版本的GCC(4.0以上),所以环境搭建是个难题.要么就是编译后 ...

  9. 深度学习(四十一)cuda8.0+ubuntu16.04+theano、caffe、tensorflow环境搭建

    cuda8.0+ubuntu16.04+theano.caffe.tensorflow环境搭建 目前自己撘过深度学习各种库.各种环境,已经搭建了n多台电脑,发现每台电脑配置安装方法各不相同,总会出现各 ...

  10. 自己动手搭建 Linux 0.12 编译环境 — Linux主机

    Hi,又见面了,这两天事情比较少,所以又快速构思这篇的内容. 上篇我用极简模式说完了关于Linux 0.12的模拟环境Bochs,这篇同样沿袭上篇的思路,不过主要内容是关于Linux主机.在搭建Lin ...

最新文章

  1. 某个第三方支付平台数据库的分析、学习与总结(转)
  2. 螃蟹不能吃的四个部位,爱吃螃蟹的一定要进来看看。
  3. Hadoop将死,图数据库成为新趋势!
  4. 如何为libs目录下的jar包关联源代码
  5. AppleScript快速入门教程
  6. Leetcode--304. 二维区域和检索
  7. ECMAScript 5.0 基础语法(上)
  8. 45. PHP 过滤器(Filter)
  9. TIA PORTAL西门子PLC的CPU固件版本兼容问题
  10. 单龙芯3A3000-7A1000PMON研究学习-(28)撸起袖子干-再来一杯代码10-内存初始化1
  11. 路由器第三方固件的刷入与调试
  12. mov转换成mp4,mov转mp4方法
  13. java获取文件名格式 / java获取文件名后缀
  14. LayaWorld游戏高峰论坛成都站:用新思路探索游戏业未来!
  15. java适合音频格式_我应该为java使用什么音频格式?
  16. Vanishing point detection
  17. 操作系统的名字的读音
  18. mysql修改数据库名的方法
  19. java面试题大汇总,京东校招java面试题
  20. 服务器如何修改3389端口,怎么修改服务器3389端口

热门文章

  1. python turtle 乌龟赛跑_童年听的龟兔赛跑的故事,我终于用100行Python实现了!
  2. 访谈录#1:成为“温赵轮”
  3. CSS常见 属性 框架 及常用选择器
  4. Wlan学习备忘(上)
  5. 独孤求败 —— 什么才是一个完整机器学习项目流程? 适合九成以上的场景
  6. PHP:编写标准体重计算器
  7. 刷题一个半月,一口气拿下腾讯、华为、Oppo 、微软7个大厂offer,字节跳动薪资涨幅60%!...
  8. L4RE学习笔记——服务介绍
  9. python使用作为转义符的开始符号_python转义符的使用
  10. 在线计算机励志文案,那些惊艳的励志文案,句句经典,值得点赞