gcc的使用

GCC安装和使用 1、什么是GCC “Linux系统下的Gcc(GNU C Compiler)是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。 gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%。” GCC 不仅支持 C 的许多“方言”,也可以区别不同的 C 语言标准;可以使用命令行 选项来控制编译器在翻译源代码时应该遵循哪个 C 标准。例如,当使用命令行参数 -std=c99 启动 GCC 时,编译器支持 C99 标准。 安装命令:版本& 阅读详情

gcc的种类

命名规则

交叉编译工具链的命名规则为:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]

  • arch – 体系架构,如ARM,MIPS
  • vendor – 工具链提供商
  • os – 目标操作系统
  • eabi – 嵌入式应用二进制接口(Embedded Application Binary Interface)

注意:

  1. 没有vendor时,用none代替;
  2. 没有os支持时,也用none代替
  3. 同时没有vendor和os支持时,只用一个none代替,比如arm-none-eabi中的none表示既没有vendor也没有os支持。根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如
  • arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。(ARM architecture,no vendor,not target an operating system,complies with the ARM EABI) 
    用于编译 ARM 架构的裸机系统(包括 ARM Linux 的 boot、kernel,不适用编译 Linux 应用 Application),一般适合 ARM7、Cortex-M 和 Cortex-R 内核的芯片使用(如,编译STM32的程序。),所以不支持那些跟操作系统关系密切的函数,比如fork(2),它使用的是 newlib 这个专用于嵌入式系统的C库。
  • arm-none-linux-eabi:没有vendor的、用于Linux的,使用Glibc。arm-none-linux-gnueabi-xxx 交叉编译工具的浮点运算非常优秀。一般ARM9、ARM11、Cortex-A 内核,带有 Linux 操作系统的会用到。
  • arm-linux-gnueabi-gcc和arm-linux-gnueabihf-gcc两个交叉编译器分别适用于 armel 和 armhf 两个不同的架构,armel 和 armhf 这两种架构在对待浮点运算采取了不同的策略(有 fpu 的 arm 才能支持这两种浮点运算策略)。其实这两个交叉编译器只不过是 gcc 的选项 -mfloat-abi 的默认值不同。gcc 的选项 -mfloat-abi 有三种值 soft、softfp、hard(其中后两者都要求 arm 里有 fpu 浮点运算单元,soft 与后两者是兼容的,但 softfp 和 hard 两种模式互不兼容): soft: 不用fpu进行浮点计算,即使有fpu浮点运算单元也不用,而是使用软件模式。

  1. softfp: armel架构(对应的编译器为 arm-linux-gnueabi-gcc )采用的默认值,用fpu计算,但是传参数用普通寄存器传,这样中断的时候,只需要保存普通寄存器,中断负荷小,但是参数需要转换成浮点的再计算。 
  2. hard: armhf架构(对应的编译器 arm-linux-gnueabihf-gcc )采用的默认值,用fpu计算,传参数也用fpu中的浮点寄存器传,省去了转换,性能最好,但是中断负荷高。

ABI 和 EABI

ABI:二进制应用程序接口(Application Binary Interface (ABI) for the ARM Architecture)。在计算机中,应用二进制接口描述了应用程序(或者其他类型)和操作系统之间或其他应用程序的低级接口。

EABI:嵌入式ABI。嵌入式应用二进制接口指定了文件格式、数据类型、寄存器使用、堆积组织优化和在一个嵌入式软件中的参数的标准约定。开发者使用自己的汇编语言也可以使用 EABI 作为与兼容的编译器生成的汇编语言的接口。

两者主要区别是,ABI是计算机上的,EABI是嵌入式平台上(如ARM,MIPS等)。

gcc的选项

-nostartfiles 不连接系统标准启动文件,而标准库文件仍然正常使用。

-nostdlib 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。这个选项常用语编译内核、bootloader等程序,他们不需要启动文件、标准库文件。一般应用程序才需要系统标准启动文件和标准库文件。裸机/bootloader、linux内核等程序不需要启动文件、标准库文件。

  -v:查看gcc编译器的版本,显示gcc执行时的详细过程
  -o <file>                Place the output into <file>
                           指定输出文件名为file,这个名称不能跟源文件名同名
  -E                       Preprocess only; do not compile, assemble or link
                           只预处理,不会编译、汇编、链接
  -S                       Compile only; do not assemble or link
                           只编译,不会汇编、链接
  -c                       Compile and assemble, but do not link
                           编译和汇编,不会链接   

-lc:链接libc库文件,其中libc库文件中就实现了printf等函数。小写的l用于添加某个库。

-L  大写的L用于添加lib库的路径

-static 静态库链接。不加默认是动态库连接。ldd命令可以查看链接了哪些动态库

连接库说明

动态链接使用动态链接库进行链接,生成的程序在执行的时候需要加载所需的动态库才能运行。
动态链接生成的程序体积较小,但是必须依赖所需的动态库,否则无法执行。

静态链接使用静态库进行链接,生成的程序包含程序运行所需要的全部库,可以直接运行,
不过静态链接生成的程序体积较大。

参考资料:

arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别

关注公众号《首飞》回复“机器人”获取精心推荐的C/C++,Python,Docker,Qt,ROS1/2,机器人学等机器人行业常用技术资料。

编译配置(1)——ARMv7,ARMv8(AArch64) 浮点配置等相关知识 Neon(ARM架构处理器扩展结构) Neon是适用于ARM Cortex-A系列处理器的一种128位SIMD(Single Instruction, Multiple Data,单指令、多数据)扩展结构。 FPU:(Float Point Unit,浮点运算单元) FPU是专用于浮点运算的处理器,以前的FPU是一种单独芯片,在486之后,英特尔把FPU集成在CPU之内。 -mfpu -mfloat-abi arm-linux-gcc -march=armv7-a -mfpu=neon -mfloat-ab 阅读详情

相关推荐

-mfloat-abi=softfp的问题,指定fpu为neon

测试使用的C语言程序源码如下,程序源码文件是arm-c-disassemble.c: int sum(int a, int b) { return a + b; } int sub(int a, int b) { return a - b; } 1、编译但是不汇编,查看产生的汇编源码程序源码: arm-Linux-androideabi-gcc -S -

优快云明星博主,认证博客专家,视频、Matlab领域优质创作者。 7689

ARM GCC浮点相关总结(转)

在编译uboot的时候碰到硬浮点和软浮点的问题,找了一点相关资料,转一篇文字留作备忘。 本文转自http://blog.youkuaiyun.com/yuanyou/article/details/6410326 1、名字解释: ABI,application binary interface (ABI),应用程序二进制接口。 2、编译版本问题: GCC 4.0 为分界线 4.0...

weixin_30521649的博客 383

GCC和GCC-C++编译器安装与使用指南

本文还有配套的精品资源,点击获取 简介:GCC是一个开源且跨平台的编译器集合,由GNU项目开发,支持多种编程语言的编译。GCC-C++是GCC的C++语言扩展,提供了对C++语言的全面支持。本文介绍了GCC和GCC-C++的安装方法,使用基础,以及编译选项,包括优化与调试,强调了这些工具在开发中的重要性以及如何利用它们提高编程效率和程序质量。 1. GCC和GCC...

weixin_42514540的博客 4868

ARM GCC浮点编译选项

1      浮点类型-mfloat-abi 1.1      选项 -mfloat-abi=soft/softfp/hard 支持3种类型,各类型含义如下: n  soft 不使用硬件浮点单元,gcc使用软浮点库来完成浮点运算。适用于不含FPU的CPU。 n  softfp 使用硬浮点单元,会生成硬浮点指令,生成何

kevin.ji的专栏 8178

椭圆曲线点加的推导公式(一)

椭圆曲线点加推导过程

qq_32100199的博客 1518

扫码器USB键盘报告描述符数据格式解析

Byte0用于判断Shift是否按下,当按下时Byte0的Bit1会置1,即0x02,若未按下,Bit为0,即0x00。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>未按下Shift。0x00 0x00 0x00 0x00 0x00 0x00 0x00--->>按下Shift。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出A。0x00 0x04 0x00 0x00 0x00 0x00 0x00--->>输出a。

m0_65548585的博客 1142

Windows中使用GCC介绍

Windows中使用GCC介绍。注意,GCC与gcc,g++是不同的东西: GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。 gcc是GCC中的GUN C Compiler(C 编译器)。 g++是GCC中的GUN C++ Compiler(C++编译器)。.....................

cnds123的专栏 1万+

步进电机梯形加减速算法的实现

步进电机梯形加减速算法的实现

m0_69251699的博客 1318

【GCC、gcc、g++】中

本文介绍了GCC编译器套件中的gcc和g++工具。

优快云_RTKLIB的博客 912

Graylog日志系统实战:高效接收与解析交换机日志

本文提供Graylog日志系统的实战部署与配置指南,重点讲解如何高效接收与解析交换机日志。通过Docker快速部署,配置Syslog输入,并指导华为、华三等主流交换机将日志发送至Graylog。文章还介绍了使用提取器解析日志字段、创建数据流进行分类,以及设置报警规则,实现从被动排查到主动预警的运维转变,帮助网络工程师构建集中、智能的日志管理系统。

weixin_29284885的博客 541

STM32解析航模遥控器的PPM信号

使用STM32对航模遥控器的PPM信号进行解析

qq_44343584的博客 9734

gcc和arm-linux-gcc(使用)

gcc和arm-linux-gcc(使用)

兰钧的博客 8493

门信号表达式_毫米波FMCW体制雷达的信号处理中的FFT等效为相干积累的解释

民用的77G或24G毫米波雷达目前普遍采用发射波形为一连串线性调频连续波(即所谓chirp信号,啁啾信号,线性调频波如果能够下变频到人耳可接收的频段,听起来很类似“啁啾”“啁啾”的鸟叫声)。一串前后相继的chirp信号与一段长时间的“空闲”组成一帧信号(比如汽车雷达整机厂普遍采用一帧为50ms)。用频谱仪观察chirp信号串,横坐标为时间,纵坐标为频率,如下图所示(此处引用TI产品手册...

weixin_39725756的博客 1949

【GCC】gcc编译器的使用

gcc编译器的使用

weixin_50964793的博客 7865

Python 爬虫实战:攻克小红书种草笔记,抓取美妆好物推荐数据

通过本次 Python 爬虫实战,我们成功地从小红书爬取了美妆种草笔记的数据,并进行了存储、处理、分析和可视化展示。在这个过程中,我们不仅掌握了爬虫技术的基本应用,还学会了如何对动态加载的数据进行处理和分析。然而,本次爬虫任务也存在一些局限性,例如仅爬取了部分笔记的数据,且未对笔记中的图片和视频内容进行分析。在未来的工作中,我们可以进一步优化爬虫程序,爬取更多笔记的数据,并深入分析笔记中的多媒体内容、用户行为模式等,为美妆品牌和消费者提供更有价值的数据支持。

u014481728的博客 3274

AI产品经理面试宝典第94天:RAG知识库构建与预处理策略面试指南

本文深入解析RAG知识库构建的核心挑战与预处理策略,涵盖文档格式转换、问答对生成及自动化测试全流程,为AI产品经理提供面试必备的实战方法论与避坑指南,助你精准应对技术深度类问题。

打造全国最全的AI Agent开发知识领域的博客 312

gcc安装及使用

GCC GCC简介 早期 GCC 的全拼为 GNU C Compiler,即 GUN 计划诞生的 C 语言编译器,显然最初 GCC 的定位确实只用于编译 C 语言。但经过这些年不断的迭代,GCC 的功能得到了很大的扩展,它不仅可以用来编译 C 语言程序,还可以处理 C++、Go、Objective -C 等多种编译语言编写的程序。与此同时,由于之前的 GNU C Compiler 已经无法完美诠释 GCC 的含义,所以其英文全称被重新定义为 GNU Compiler Collection,即 GNU 编

weixin_46008120的博客 2037

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

gcc安装与使用

gcc安装与使用

qq_39030233的博客 7672

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

gcc编译器的使用

文章目录1 gcc编译过程1.1 gcc分步编译过程1.2 编译多个文件2 常用编译选项3 制作、使用库文件3.1 制作、使用静态库3.2 制作、使用动态库 1 gcc编译过程 一个C/C++文件要经过预处理(preprocessing)、编译(compilation)、汇编(assembly)和链接(linking)等4步才能变成可执行文件。 1.1 gcc分步编译过程 预处理: gcc -E...

木子皿--啥都不会的菜鸟 911

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

GCC 详解

[root@bogon ~]# gcc -xc demo.c #或者直接运行 gcc demo.c [root@bogon ~]#

BIG SHARK的博客 3010

GCC,gcc,g++关系

GCC,gcc,g++关系 GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。) 即当下的 GCC 编译器还支持编译 Go、Objective-C,Objective-C ++,Fortran, Java,Ada,D 和 BRIG(HSAIL)等程序, gcc是GCC中的GUN C C

jokerMingge的博客 759

【GCC编译】GCC 使用中常用的参数及命令

【转载】gcc 使用中常用的参数及命令 本文转载自:http://www.cnblogs.com/yaozhongxiao/archive/2012/03/16/2400473.html 如需转载,请注明原始出处。谢谢。 ----------------------------------------------------------------...

一个专注于嵌入式IoT领域的架构师,深耕IoT领域多年,深度掌握IoT领域的相关技术栈,包括但不限于RTOS内核的实现及其移植、硬件驱动移植开发、网络通讯协议开发、编译构建原理及其实现、底层汇编及编译原理、编译优化及代码重构、嵌入式IoT系统的架构设计等。 6万+

Ubuntu GCC的使用

Ubuntu GCC的使用

liuasdfgqwer的博客 1745

WINDOWS下如何安装GCC

WINDOWS下如何安装GCC? 2013/09/14 JULUREN 第一章 在视窗操作系统下的GCC 第一节 GCC家族概览 GCC 是一个原本用于 Unix-like 系统下编程的编译器。不过,现在 GCC 也有了许多 Win32 下的移植版本。所以,也许对于许多 Windows 开发者来说, GCC 还是一个比较陌生的东西。所以,我希望通过这章的叙述

yunxian_19的专栏 2万+

linux下gcc和gcc-c++的作用

linux 为什么要安装gcc和gcc-c++(又叫做g++) gcc-c++(又叫做g++)是为gcc提供c++语言特性支持的 linux上的gcc是Gnu的C语言编译器,至于C++编译器,它的名字叫做g++。 linux中的gcc是由GNU推出的一款功能强大的、性能优越的多平台编译器。gcc编译器能将C、C++语言源程序和目标程序编译、连接成可执行文件。 GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object

hualinger的博客 3518

GCC使用

https://pan.wps.cn/l/setVpd8ji [文档] linux基础班GCC.doc 1、GCC、gcc、g++的区别: (1)三者比较 GCC : GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。 gcc是GCC中的GUN C Compiler(C 编译器) g++...

一个不甘于此的弱鸡 404
上一篇: make的用法收集
下一篇: 在STM32中将变量或代码设定在指定内存地址的方法
首飞爱玩机器人
博客等级 码龄14年 6990粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

首飞爱玩机器人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值