GNU编译器(GCC)原理简介

GNU编译器(GCC)原理简介
   GNU编译器(GCC, GNU Compiler Collection)是GNU工具链的关键组件,与GNU、Linux相关项目的标准编译器。它设计之初仅用来处理C语言的(也被称为GNU C编译器),紧接着扩展到C++、Objective-C/C++、Fortran、Java、Go等编程语言。
目前,GCC已经被以知道各种指令集体系结构中,成为了自由软件、专有软件的开发工具。GCC编译器可以应用多种平台:操作系统(Linux/Windows)、移动端(Android/iSO)、嵌入式系统(Arm/FPGA)等。
 1. GNU编译器(GCC)的编译过程
如图2-32所示,GCC的编译工程可以分为四个步骤:
1)预处理(Pre-Processing):使用CPP对C语言源程序进行预处理生成预处理.i文件,在该过程主要对源代码文件中的文件包含(include)、预编译语句(如宏定义define等)进行分析;
2)编译(Compiling):调用CC1将预处理后的.i文件编译汇编语言.s文件,这个阶段主要是对预处理文件进行转换以生成机器语言的目标程序;
3)汇编(Assembling):GCC调用AS对汇编语言.s文件进行汇编,生成目标文件.o;
4)链接(Linking):GCC调用LD将各个模块的.o文件连接起来生成一个可执行程序文件,该过程将目标文件/库文件指派到可执行程序各自对应的位置。
图2-32 GNU编译器(GCC)的编译过程
GCC编译过程中,每个步骤都会生成不同的文件格式,C/C++在编译过程中生成的文件类型,见表2-18。
表2-18 列举了C/C++在编译过程中生成的文件类型

文件后缀

描述

.c

C语言源文件

.C/.cc/.cxx/.cpp

C++ 源文件

.h

C/C++ 头文件

.i/.ii

经过预处理的 C/C++ 文件

.s/.S

汇编语言源文件

.o/.obj

静态库

.so/.dll

动态库

 
可以根据自己的需要控制GCC的编译过程和中间文件,以便检查、调试和优化程序。如图2-33所示,给出了C语言随着编译过程生成的文件类型。
 
图2-33 C语言随着编译过程生成的文件类型
 2. GNU编译器(GCC)的使用方法
GCC的基本用法如下所示,使用GCC编译器需要关注两个方面:调用参数(操作方法)和文件名称(操作对象),见表2-19。
表2-19 列举了C/C++在编译过程中生成的文件类型

命令

作用

-c

只进行编译过程,而不链接成可执行文件,编译器只是将输入的源代码

-g

生成符号调试工具(GNU的gdb)所需要的符号信息。

-E

仅执行预处理操作,而不进行编译、汇编和链接操作

-S

仅执行编译操作,而不进行汇编、链接操作

-O

对程序进行优化编译、链接操作,提高可执行文件的执行效率

-o file_name

设置输出文件名为file_name,注意输出文件名不能和源文件同名;如果不给出

GCC的外部结构遵循Unix约定,用户调用特定语言的驱动程序解释命令参数,生成完整的可执行二进制文件。
每种编程语言的编译器都是一个单独的程序,读取源代码并输出机器码;每种编程语言的前端都会解析该语言的源代码,最终生成一个抽象的语法树。
 3. GNU编译器(GCC)手册使用方法
在Linux系统上,可以查看GCC的手册。在终端输入man gcc,即可打开,如图2-34所示。
图2-34 可以查看GCC的手册
手册中给出的介绍比任何资料都详细准确,但是非常的长1.6万行。快速浏览手册的快捷键与vim很相似,见表2-20。
表2-20 快速浏览手册的快捷键与vim很相似

快捷键

作用

g/G

跳转到文档顶/底部

u/d

向上(up)/下(down)翻动半页

f/b

向上(forward)/下(backward)翻动一页

/

在文档中搜索内容,按下/在后面输入想要查询的内容

n/N

跳转到下/上一个搜索的内容

q

退出手册

                       

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/822431.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

22207130-叶盛东-Java大作业总结

Java大作业总结 目录Java大作业总结一.前言第一次作业1.设计与分析第一小题第二小题第三小题第四小题第五小题2.踩坑心得3.改进建议第二次作业1.设计与分析第一小题第二小题第三小题第四小题2.踩坑心得3.改进建议第三次作业1.设计与分析第一小题第二小题第三小题2.踩坑心得3.改…

基于ESP32的桌面小屏幕实战[1]:需求分析与方案选型

项目来源:B站小智学长 1. 需求分析看时间:可联网同步时间;有屏幕 看天气:可联网同步天气;有屏幕 记单词:可联网同步单词;有屏幕 番茄工作时钟:可以手机设置工作、休息时间;有屏幕 获取B站粉丝数: 看室内温湿度:有温湿度传感器;有屏幕 可放入口袋:1-2寸屏幕;带电池…

利用samtools flagstat 对bam文件统计比对率的时候看的是哪个mapping rate

001、 在samtools flagstat 对bam的统计结果中,一共有三个比对率的结果: 002、比对率结果应该以哪个为准? 答案是:以3为准003、以山羊、绵羊的fastq数据,绵羊的参考基因组进行比对测试 a、如果以primary mapped对比,基本看不出两者的差异(其中S是sheep,G是goat) b、…

CPU 计算时延分析

CPU 计算时延 CPU(中央处理器)是计算机的核心组件,其性能对计算机系统的整体性能有着重要影响。CPU 计算时延是指从指令发出到完成整个指令操作所需的时间。理解 CPU 的计算时延对于优化计算性能和设计高效的计算系统至关重要。 1. CPU 计算时延的组成 CPU 计算时延主要由以…

Windows 记录一次磁盘相关的PC卡顿问题

我的电脑最近经常抽疯,时不时卡顿一次 检查系统事件日志,会有这俩个:发出了对设备 \Device\RaidPort0 的重置。 已在磁盘 0 (PDO 名称: \Device\0000003a)的逻辑块地址 0x7206a8 处重试 IO 操作。DiskGenis检查磁盘0,是正常的:这个FASPEED硬盘是国产士必得牌子的。京东商城…

RF/射频器件: CMD246C4 CMD235C4 CMD236C4 CMD254C3 CMD299K4 CMD262 一款5 W GaN MMIC功率放大器芯片

CMD254C3是一款高IP3双平衡混频器,采用无引脚表贴封装,可用于11 GHz至20 GHz的上变频和下变频应用。CMD246C4是一款宽带GaAs MMIC低相位噪声放大器,采用无引脚表贴封装,非常适合军事、航天和通信系统。16 GHz时,该器件提供17 dB的增益,饱和输出功率为+18 dBm,噪声系数为…

记录下使用docker-compose搭建开发环境

目录结构 docker-compose.ymlversion: "3" services:nginx:image: nginx:latestports:- "80:80"volumes:- ./code:/var/www/html- ./nginx/default.conf:/etc/nginx/conf.d/default.confdepends_on:- phpphp:#image: php:8.0-fpm########################…

题目1 - 3 总结

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…

题目集 1 - 3 总结

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…

题目集 1 - 3 总结性

一、前言 在过去的一段时间里,我们完成了三次题目集的挑战。这三次题目集涵盖了丰富的知识点,题量和难度也各有不同。 (一)知识点概述 题目集 1 主要涉及 Java 的面向对象编程基础,包括类的定义、对象的创建和方法的调用。在这个题目集中,我们学会了如何使用类来封装数据…

2024-2025-1 20241420 《计算机基础与程序设计》第五周学习总结

2024-2025-1 20241420姚金济 《计算机基础与程序设计》第五周学习总结 作业信息 |作业所属课程|<班级链接>https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |作业要求|<链接>https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05 |这个作业的目标| ①…

《DNK210使用指南 -CanMV版 V1.0》第三十三章 image元素绘制实验

第三十三章 image元素绘制实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k…