环境搭建—3.0 Linaro gcc

article/2025/10/24 15:05:00

一、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

在这里插入图片描述


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

相关文章

mac使用gcc编译器

mac自带的编译器是clang编译器而且自带的gcc是映射到clang的之前看到网上需要关闭SIP模式很烦,我试了试关闭了也删除不了gcc,也无法软链接。 后来找到一篇曲线救国的帖子,是在~目录下使用的。 首先下载gcc的最新版本&#xff0c…

win10下安装gcc

win10下安装gcc 一、gcc是什么?1.1、安装gcc 第一次安装,记录一下 一、gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C、C、Objective-C、Fortran、Java、Ada和Go语言的前端,也包括了这些语言的库(如libstdc、libgcj等等)。GCC的初…

gcc

gcc:一个工具集合,包含预处理器,编辑器,汇编器,链接器等组件 说明:当不使用任何选项时,gcc将会生成一个名为a.out的可执行文件 gcc选项 gcc -E 预处理 .igcc -S 编译成汇编代码 .sgcc -c 汇编成目标代码 .ogcc -o 链接成可执行代码 .out/.…

GCC,G++介绍

1.什么是GCC GCC 原名为 GNU C语言编译器(GNU C Compiler)GCC(GNU Compiler Collection,GNU编译器套件)是由 GNU 开发的编程语言 译器。GNU 编译器套件包括C、C、Objective-C、Java、Ada 和 Go 语言前 端,…

tdm gcc怎么运行c语言,TDM-GCC 64位

TDM-GCC 是为windows系统打造的编译器套件,包括了自由并开源的 MinGW 或 MinGW-w64 的运行时 APIs,当GCC创建一个新的版本,TDM构建二进制包在MinGW环境中使用MinGW的官方GCC软件包的替代品。需要的朋友可以下载! TDM-GCC安装教程 …

什么是GCC? GCC编译过程

什么是GCC? 最简单的回答就是Linux 下的C/C 编译器。 其实一开始的确是这样的,GCC 原名为GUN C 语言编译器( GNU C Compiler), 原本只能处理编译C语言。 但是后来GCC发展壮大了,可以编译C, Fortran,Pascal,Objective-C, Java,A…

GCC是什么

GCC是什么 说到 GCC,就不得不提 GNU,“GNU”是“GNUs Not Unix!”(GNU并非Unix!)的首字母递归缩写,中文名“革奴计划”。GNU 计划的最终目标是打造出一套完全自由(即自由使用、自由更改、自由发…

GCC简介

一. GCC简介 GCC(GNU C Compiler)原名GNU C语言编译器,是由GNU开发的编程语言译器,只能处理C语言。但其很快扩展,变得可处理C,后来又扩展为能够支持更多编程语言,如Fortran、Pascal、Objective…

一张图学会python递归函数

递归函数属于那种“难者不会,会者不难”的事情,回想自己大学时学习递归函数的经历,简直是痛不欲生,代码里没有一行是看不懂的,但就是理解不了它是怎样运行的。 等到自己悟通了原理,就又会觉得这东西太简单了…

【Python递归练习】

1.出售金鱼问题第一次卖出全部金鱼的一半加二分之一条金鱼;第二次卖出乘余金鱼的三分之一加三分之一条金鱼;第三次卖出剩余金鱼的四分之一加四分之一条金鱼;第四次卖出剩余金鱼的五分之一加五分之一条金鱼;现在还剩下11条金鱼。问…

python 递归函数详解

在 python中,有一种非常神奇的函数:递归函数,它可以让你的程序实现自顶向下的递归调用,从而实现程序的无限循环。这是一种非常神奇的语言,可以让你使用一种语言实现另一种语言。它还有一个很酷的名字: shel…

python函数递归求和详解_Python递归函数详细分析

什么是递归? 递归,就是在函数运行中自己调用自己 代码示例: def recursion(n): # 定义递归函数 print(n) # 打印n recursion(n1) # 在函数的运行种调用递归 recursion(1) # 调用函数 这个函数在不断的自己调用自己,每次调用n1,看下运行结果: 1 2 ..... 998Tracebac…

Python递归思想与代码实现

1, 递归思想 递归算法:递归(Recursion),在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。 这是官方的解释,翻译成人话就是: 函数内部自己调用自己函数必须有出口 函数自己调用自己很好理解&#xff0c…

python函数递归调用时对深度没有限制_python递归深度

广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 今天在写爬虫的时候,发现了一个事情,使用str方法强制转换一个beautifulsoup对象成字符串的时候报错了,提示是“maximum recursion depth exceeded while cal…

python递归函数详解

python递归函数是指一个函数从一个状态开始,然后返回另一个状态。递归函数是在实现过程中遇到的最基本的一类函数。比如, int i0; int j0; int c1;等等都是一类递归函数,但是我们知道,它们在实现过程中需要执行多次,并…

Python 递归的优化

文章目录 前言一、递归实现斐波那契二、优化后的斐波那契总结 前言 递归,很常见的一种算法,在初学的时候我们都会用递归来解决斐波那契数列,但递归本身有非常大的缺陷,就是时间和空间占用都非常大,在进阶学习后&#…

Python 递归实现乘法

Python定义函数:使用递归求乘积(x*y) 1 当作x个y相加或者y个x相加 2 当其中一数(以x为例)不为1时,返回y加上该函数,同时每次x-1,直至x1为止,此过程实现了x个y相加 具体代码如下:

python递归遍历查询文件 文件夹

文章目录 🍗先看运行效果🍔 具体思路🍟 一、主要使用的模块以及方法🌭 二、主要思路以及代码🍿 1、开始位置🧂 2、关键位置🥓 3、结果输出 🧇 完整源码🥞 结尾&#x1f9…

轻松搞懂Python递归函数的原理与应用

递归: 在函数的定义中,函数内部的语句调用函数本身。 1、递归的原理 学习任何计算机语言过程中,“递归”一直是所有人心中的疼。不知你是否听过这个冷笑话:“一个面包,走着走着饿了,于是就把自己吃了”。 常理推断&…

python递归如何理解

最近在做递归一些相关的东西,发现递归入门很容易,但要具体了解其实现过程,比较难以理解,在这里将自己这几天的摸索记录一下,写知乎的主要目的是为了给自己做笔记,在做笔记的同时,帮助后来人少走…