程序编译生成的文件

目录

.i 文件

.s 文件

.o文件

总结



在 C++ 编程中,.i、.s和 .o 文件是编译过程中生成的不同阶段的文件,它们代表不同的含义:

.i 文件

全称 :预处理后的文件(Intermediate File)。
含义:.i文件是源代码文件(如 .cpp 文件)经过预处理阶段生成的文件。预处理阶段主要处理源代码中的预处理指令,如 #include、#define等。.i 文件包含了经过预处理后的代码,即所有头文件被展开,宏被替换,条件编译指令被处理等。
作用:.i文件主要用于调试和查看预处理后的代码,可以帮助开发者理解预处理阶段的操作结果。
生成方式:

g++ -E main.cpp -o main.i

这条命令会读取 main.cpp 文件,进行预处理操作,并将结果输出到 main.i 文件中。

详细说明

  • g++:调用 G++ 编译器。
  • -E:仅进行预处理。
  • main.cpp:你的源文件。
  • -o main.i:指定输出文件的名称为 main.i。

.s 文件

全称 :汇编文件(Assembly File)。
含义 :.s文件是源代码文件经过编译阶段生成的汇编代码文件。编译阶段将预处理后的代码(.i 文件)转换为汇编代码,汇编代码是低级的、与体系结构相关的代码,可以直接被汇编器转换为机器码
作用:.s 文件主要用于查看编译器生成的汇编代码,可以帮助开发者理解编译器如何将高级语言代码转换为低级的汇编代码,以及优化编译器生成的代码等。
生成方式:使用 g++或 gcc编译器时,可以通过添加 -S选项来生成汇编文件。例如:

g++ -S main.cpp

这会生成 main.s文件。

.o文件

全称 :目标文件(Object File)/可重定向目标文件
含义 :.o文件是源代码文件经过编译和汇编阶段生成的目标文件。目标文件包含了机器码、数据、符号表等信息,是二进制格式的文件,可以直接被链接器使用。目标文件是独立的,不依赖于其他文件,但需要通过链接器将其与其他目标文件和库文件链接在一起,生成最终的可执行文件
作用 :.o文件是编译过程中的中间产物,主要用于链接阶段。通过将多个目标文件链接在一起,可以生成最终的可执行文件。目标文件还包含了符号信息,可以用于调试和动态链接等。
生成方式 :使用 g++或 gcc 编译器时,可以通过添加 -c选项来生成目标文件。例如:

g++ -c main.cpp

这会生成 main.o 文件。

之后就可以在Linux环境下编译cpp文件

g++ 文件名.cc -o 想要形成的文件名

总结

  1. .i文件是预处理后的文件,主要用于查看预处理阶段的结果。
  2. .s 文件是汇编文件,包含汇编代码,用于查看编译器生成的汇编代码。
  3. .o 文件是目标文件,包含机器码和其他信息,用于链接阶段生成可执行文件。

这些文件在编译和链接过程中起着重要的作用,可以帮助开发者理解和调试代码。

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

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

相关文章

[S32K]SPI

SpiShiftClockidleLevel: CLK空闲时电平(CPOL); SpiDataShifrEdge:数据移位边沿(CPHA); SpiDataWidth: SpiTransferStart: MSB(高位起始),LSB(低位起始);; SpiHwUnit: 这是一个具体的硬件? SpiDataShiftE…

系统思考:客户价值

“真正的市场竞争,不是比谁更能制造产品,而是比谁更能创造价值。” ——杰夫贝索斯 在组织辅导中,我经常问团队一个问题:“我们的客户是谁?”大多数人的第一反应是——“支付费用的就是客户。” 这在过去的市场扩张阶…

ArcGIS Pro 车牌分区数据处理与地图制作全攻略

在大数据时代,地理信息系统(GIS)技术在各个领域都有着广泛的应用,而 ArcGIS Pro 作为一款功能强大的 GIS 软件,为数据处理和地图制作提供了丰富的工具和便捷的操作流程。 车牌数据作为一种重要的地理空间数据&#xf…

OpenCV图像加权函数:addWeighted

1 addWeighted函数 在OpenCV 里,addWeighted 函数的作用是对两个图像进行加权求和,常用于图像融合、图像过渡等场景。函数如下: cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])2 参数解释 src1:第一个输入图…

Tcp网络通信的基本流程梳理

先来一张经典的流程图 接下介绍一下大概流程,各个函数的参数大家自己去了解加深一下印象 服务端流程 1.创建套接字:使用 socket 函数创建一个套接字,这个套接字后续会被用于监听客户端的连接请求。 需要注意的是,服务端一般有俩…

mysql学习-删除数据(drop、truncate、delete)

1、概述 drop、truncate、delete都可以删除mysql中的数据,但它们的作用范围和操作方式有很大的不同。 2、详细区别 2.1、drop 特点: 1、速度快 2、会删除表数据,还会删除表结构,包括与该表相关的所有数据,索引&…

编程自学指南:java程序设计开发,网络编程基础,TCP编程,UDP编程,HTTP客户端开发

编程自学指南:java程序设计开发,网络编程基础 学习目标: 理解网络协议(TCP/IP、UDP)的核心概念 掌握Socket编程实现客户端与服务端通信 能够通过多线程处理并发网络请求 开发简单的网络应用(如聊天程序…

leecode797.所有可能的路径

深度优先搜索 class Solution { private:vector<vector<int>> result;vector<int> temp;void allPathsSourceTarget(vector<vector<int>> &graph,int v){if(vgraph.size()-1)result.push_back(temp);else{for(auto& adjVertex:graph[v]…

第八节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red和 Black 。 通过对 任何…

微信小程序threejs三维开发

微信小程序threejs开发 import * as THREE from three; const { performance, document, window, HTMLCanvasElement, requestAnimationFrame, cancelAnimationFrame, core, Event, Event0 } THREE .DHTML import Stats from three/examples/jsm/libs/stats.module.js; im…

jupyter无法转换为PDF,HTMLnbconvert failed: Pandoc wasn‘t found.

无法转为PDF 手动下载工具 https://github.com/jgm/pandoc/releases/tag/3.6.3 似乎跟我想的不大一样&#xff0c;还有新的报错 https://nbconvert.readthedocs.io/en/latest/install.html#installing-tex 不知道下的啥玩意儿 sudo apt-get install texlive-xetex texlive-fon…

关于PLC、电缆线材及气缸选型的详细教程

以下是关于PLC、电缆线材及气缸选型的详细教程&#xff0c;整合了多个专业来源的核心要点&#xff1a; 一、PLC选型要点 生产厂家选择 日系PLC&#xff08;如三菱FX系列、欧姆龙CP1系列&#xff09;适合独立设备或简单控制系统&#xff0c;性价比高。欧美系PLC&#xff08;如西…

使用 Excel 实现绩效看板的自动化

引言 在日常工作中&#xff0c;团队的绩效监控和管理是确保项目顺利进行的重要环节。然而&#xff0c;面临着以下问题&#xff1a; ​数据分散&#xff1a;系统中的数据难以汇总&#xff0c;缺乏一个宏观的团队执行情况视图。​看板缺失&#xff1a;系统本身可能无法提供合适…

02 windows qt配置ffmpeg开发环境搭建

版本说明 首先我使用ffmpeg版本是4.2.1 QT使用版本5.14.2 我选择是c编译 在02Day.pro⾥⾯添加ffmpeg头⽂件和库⽂件路径 win32 { INCLUDEPATH $$PWD/ffmpeg-4.2.1-win32-dev/include LIBS $$PWD/ffmpeg-4.2.1-win32-dev/lib/avformat.lib \$$PWD/ffmpeg-4.2.1-win32-dev/l…

Dask:Python高效并行计算利器

Dask&#xff1a;Python高效并行计算利器 Dask是一个开源的Python并行计算库&#xff0c;旨在扩展Python常用工具&#xff08;如NumPy、Pandas、Scikit-learn等&#xff09;的功能&#xff0c;使其能够处理更大规模的数据集和更复杂的计算任务。它通过动态任务调度和分布式计算…

掌握市场先机:9款销售渠道管理工具深度测评

本文主要介绍了以下9款销售渠道管理工具&#xff1a;1.纷享销客&#xff1b; 2.销帮帮&#xff1b; 3.小满CRM&#xff1b; 4.有赞&#xff1b; 5.Oracle NetSuite&#xff1b; 6.Salesforce Sales Cloud&#xff1b; 7.Cin7&#xff1b; 8.Pipedrive&#xff1b; 9.BigCommerc…

C语言基础知识04

指针 指针概念 指针保存地址&#xff0c;地址是字节的编号 指针类型和保存的地址类型要一直 使用时注意&#xff0c;把地址转换为&变量的格式来看 int a[3]; a转为&a[0] 指针的大小 64bit 固定8字节&#xff0c; 32bit 固定4字节 指针…

计算矩阵边缘元素之和(信息学奥赛一本通-1121)

【题目描述】 输入一个整数矩阵&#xff0c;计算位于矩阵边缘的元素之和。所谓矩阵边缘的元素&#xff0c;就是第一行和最后一行的元素以及第一列和最后一列的元素。 【输入】 第一行分别为矩阵的行数m和列数n&#xff08;m<100&#xff0c;n<100&#xff09;&#xff0c…

异常(9)

大家好,今天我们来详细介绍一下异常抛出的知识,在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,话不多说,来看. 在java中,可以借助throw关键字,抛出一个指定的异常对象,将错误对象告知给调用者,具体语法如下&#xff1a; throw new xxx("异常产生…

网络安全就业形势

网络安全是一个日益增长的行业&#xff0c;对于打算进入或转行进入该领域的人来说&#xff0c;制定一个清晰且系统的职业规划非常重要。2025年&#xff0c;网络安全领域将继续发展并面临新的挑战&#xff0c;包括不断变化的技术、法规要求以及日益复杂的威胁环境。 第一部分&am…