Linux——gcc/g++编译器

news2025/1/15 23:26:49

gcc是用来编译C语言代码的编译器,而g++是用来编译C++代码的编译器的。

而gcc和g++都是软件,需要使用yum进行下载

注:需要使用root权限才能下载 

在C语言编译的过程中,会有四个过程:
1预处理,2编译,3汇编,4链接


预处理:从test.c开始,该代码文件会通过预处理后便停下来,形成test.i文件(头文件展开,去注释,宏替换,条件编译)。

编译:从test.i开始,该代码文件会转换成汇编语言,形成test.s文件。

汇编:从test.s开始,该代码文件会转换成计算机能读懂的二进制文件,形成test.o文件。

链接 :将多个test.o文件由链接起绑定在一起,形成单一的可执行程序,并且与C代码库中的函数一起。

Linux对.c文件分辨进行预处理,编译,汇编三大步指令:

gcc -E test.c -o test.i  (预处理指令)
gcc -S test.i -o test.s  (编译指令)
gcc -c test.s-o test.o    (汇编指令)

第四个链接过程指令不需要写:

默认版的链接指令:gcc test.o 

因为操作系统会默认从特定目录中找所需要的第三方库,若系统库中没有,则需要使用-l选项去链接: 

完整版的链接指令:gcc test.o  -l [第三方库] 

预处理指令:

gcc -E test.c -o test.i  (预处理指令)

        预处理所做的工作就是:编译器将.c文件中的头文件从操作系统库中找出来,然后拷贝头文件的内容到一个.i文件中,相当于展开头文件;此外将定义好的宏,条件编译等指令带入代码中;将.c文件中的注释全都注释掉(计算机不需要知道你写的注释,没用!它只需要代码)

 通过上图可知:.i文件的行数达到了近900行,百分之90多的内容全是展开的头文件的内容

编译指令:

gcc -S test.i -o test.s  (编译指令)

这个过程所做的工作就是:编译器对代码进行语法,词法,语义的分析,将代码从C类型转换为高级汇编型语言。

汇编指令:

gcc -c test.s-o test.o    (汇编指令)

该过程所做的工作就是将汇编代码转换为01二进制代码,直到这一步,计算机才能真正读懂我们的代码。

 二进制内容对我们来说就是看不懂的乱码!

 此时,虽然该文件已经能被计算机所读懂,但是还仍不能被运行,缺少了一步链接过程。

 整体来说就是:test.c ---> test.i ---> test.s ---> test.o二进制文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CB06551 PRD-B040SSIB-63

​ CB06551 PRD-B040SSIB-63 步进电机驱动器有什么参数   步进电机驱动器基本参数如下: a、供电电源,可据所驱动步进电机的电源规格进行选择。交流电源供电的,如AC80V,可用220V市电经降压变压器,提供给驱动器。选用变…

YOLO-NAS 如何将 YOLO-v8 甩在身后?

在使用目标检测模型方面,我已经积累了一些经验。所以当我听说这个火热的新玩意儿叫做 YOLO-NAS 时,我知道我必须去尝试一下。让我告诉你,这个家伙真是让人惊叹。它就像是目标检测模型中的埃隆马斯克——大胆、创新,稍微有点让人害…

关于我被敲诈勒索骗了 1w 多这件事

大家好,我是程序员贺同学。 昨晚遭遇了人生中第一次诈骗,损失金额 1w多,趁这两天情绪缓了缓,把过程记录了下来,希望对看到的人有所帮助。 昨晚报完警回来快 23 点,把手机上的重要图片,视频&…

嵌入式 QT多界面切换

目录 1. 添加界面类实现 1.1 添加第二个界面的类 1.2 添加第2个界面的头文件和槽函数 2. 工程管理实现 在Qt中,多界面切换是指在一个应用程序中使用多个不同的界面,并在它们之间进行切换。这种切换可以是用户触发的,例如点击按钮或选择菜…

建议收藏,最全ChatGPT 中文调教指南:提供各个领域的角色提示词(prompts)及使用技巧,当然也有不正经指南

ChatGPT是一种基于GPT(Generative Pre-trained Transformer)模型的聊天机器人,能够回答用户提出的问题和进行对话。它是由OpenAI开发的人工智能产品,具有自然语言处理和深度学习技术。 ChatGPT在日常的对话中,表现的非…

深度剖析JVM调优法则,神器Arthas从CPU/内存出发轻松掌握调优实战技巧

场景一、CPU过高 CPU占用过高排查思路: step1:进行arthas java -jar arthas-boot.jar step2:输入deashboard 如何不记得命令可以在控制台输入help step3:查看线程栈信息 thread ID 从线程栈信息中定位到具体的java代码。 场…

Ubuntu关机、重启和注销命令

学习linux系统,最重要的是使用各种命令对系统进行操作,打开各种软件,本次主要分析ubuntu中的关机,重启,注销命令的使用详解。 关机命令 shutdown 1)使用shutdown --help可以查看shutdown命令如何使用,当然也…

mssql计划

介绍 MSSQL计划是一个用于Microsoft SQL Server数据库管理的工具。它包含了一系列的功能,可以帮助管理员进行数据库的备份、恢复、优化、监控等操作,提高数据库的性能和可靠性。 MSSQL计划的主要功能包括: 备份和恢复数据库:可以…

【运维知识进阶篇】集群架构-HTTPS证书详解

HTTPS证书在企业中非常重要,因为HTTP不安全,采用HTTP协议容易受到劫持和篡改,如果是采用HTTPS,数据在传输过程中加密,可以避免报文信息被窃取篡改,避免网站传输时信息泄露。实现https,要了解SSL…

记录--九个超级好用的 Javascript 技巧

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在实际的开发工作过程中,积累了一些常见又超级好用的 Javascript 技巧和代码片段,包括整理的其他大神的 JS 使用技巧,今天筛选了 9 个,以供大家参考…

从选型工具到内核优化,从替代方法到迁移改造,河北移动联合云和恩墨以创新树标杆,推进国产数据库应用落地...

势在必行,电信行业国产化改造适逢其时 自十四五规划以来,伴随着“科技创新”和“信息安全”等相关政策的密集出台,我国信创产业正式进入高速发展期,力求通过构建各行业全栈国产IT体系,实现科技技术自主可控&#xff0c…

原来我真的不懂Spring

(1)Spring的生命周期:简单概括为4个阶段: 1.1 创建对象 1.2 DI属性赋值 1.3 初始化 1.4 销毁 (2) Bean的作用域 : 1. Singleton: 单例 2. Prototype: 多例 3. Request: 每次http请求都会创建一个新的bean 4. Session: ~ 5. ApplicationContext: ~ (3) 注册Bean的4种方式…

企业即时通讯如何让企业沟通变得简单

企业即时通讯,企业之间的沟通协作,最核心的价值在于能够将复杂的工作任务简化为更高效、更易于沟通的协作方式。如果员工之间没有协作,就没有办法进行高效的沟通,就会出现组织低效、沟通效率低等问题。那么如何将复杂的工作任务简…

多路复用是怎么回事?

《计算机组成原理》讲述的是如何去理解程序和计算。《操作系统》讲述的是如何去理解和架构应用程序。《计算机网络》讲述的是如何去理解今天的互联网。 现在来看,“计算机网络”也许是一个过时的词汇,它讲的是怎么用计算实现通信。今天我们已经发展到了一…

HTTPS(面试高频必须掌握)

目录 一、HTTPS背景 二、HTTPS 的工作过程 1. 对称加密 2.非对称加密 3. HTTPS 基本工作过程 3.1 使用对称密钥 3.2 引入非对称密钥(面试高频问题) 3.3 黑客的手段 3.4 引入证书 3.5 捋一捋 3.6 SSL/TLS 三、HTTP 与 HTTPS 区别(…

强化学习的应用领域和案例

你好,我是zhenguo(郭震) 今天总结强化学习第四篇:强化学习的应用领域 第一:游戏领域。 强化学习在游戏领域有很多应用,如围棋、象棋、扑克等游戏的AI对战。 例如,AlphaGo使用强化学习技术,在围棋比赛中击败…

要做存储业务,我解析了一个项目的源码

最近在做存储相关的业务,更具体的来说是存储相关的研发,于是就上网查了一下相关的资料,思虑再三打算从最简单的 Json 数据交换格式开始研究。 JSON是独立于编程语言的数据交换格式,几乎所有与网络开发相关的语言都有JSON函数库&am…

chatgpt赋能Python-python_figsize

Python figsize:图形大小的更改 在Python数据可视化中,通过更改图形的大小可以使得图形更易于阅读和理解。绘图函数的“figsize”参数可以让您控制图形的大小。本文将探讨figsize的含义、使用示例以及如何根据您的需要精确调整图形大小。 什么是figsiz…

【CSAPP】虚拟内存(VM)

💭 写在前面:本文将学习《深入理解计算机系统》虚拟内存部分,CSAPP 是计算机科学经典教材《Computer Systems: A Programmers Perspective》的缩写,该教材由Randal E. Bryant和David R. OHallaron 合著。 📜 本章目录…

【Python】判断语句 ④ ( 判断语句嵌套 )

文章目录 一、判断语句嵌套1、语法说明2、代码示例 一、判断语句嵌套 1、语法说明 在 Python 的开发场景中 , 除了 单个条件判定 : if 条件判定 , if else 条件判定 ;多个并列条件判定 : if elif else 条件判定 ; 之外 , 还有 满足 前置条件判定 后 进行 第二次条件判定 的开…