Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1071|回复: 0
打印 上一主题 下一主题

c++程序编译过程

[复制链接]

1272

主题

2067

帖子

7958

积分

认证用户组

Rank: 5Rank: 5

积分
7958
跳转到指定楼层
楼主
发表于 2023-10-29 12:53:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.c++程序编译后生成的文件
.exe :可执行文件,点击即可运行
.ilk :当选定渐增型编译链接时,连接器自动生成ILK文件,记录链接信息
.obj :目标文件,obj文件与cpp文件名字一一对应
.pch :prcompiled-header,预编译头文件
.idb :文件保存的信息,使编译器在重新编译的时候只重新编译改动过的函数和最新类定义改动过的源文件,这样可提高变异速度
.pdb :Program Database,即程序数据库文件,用来记录调试信息
.dsp :Developer Studio Project,配置文件
.ncb :No Compile Browser,其中存放了供ClassView、WizardBar和Component Gallery使用的信息,由VC开发环境自动生成
.plg :超文本文件,可以用IE打开,记录build的过程
.cpp :C++源文件

2.C++程序编译过程
整个编译过程分为两大步:
1).编译 :把文本形式的源代码翻译成机器语言,并形成目标文件
2)连接 :把目标文件 操作系统的启动代码和库文件组织起来形成可执行程序
1.编译
细分为3个阶段:
1.1)先进行编译预处理
预处理又称为预编译,是做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include),这个过程会得到不包含#指令的.i文件。这个过程会拷贝#include 包含的文件代码,进行#define 宏定义的替换 , 处理条件编译指令 (#ifndef #ifdef #endif)等。

源文件(.cpp)
预处理之后文件(.i)
1.2)编译优化
通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。
这个过程将.i文件转化位.s文件。
1.3) 汇编
汇编过程就是把汇编语言翻译成目标机器指令的过程,生成目标文件(.obj .o等)。目标文件中存放的也就是与源程序等效的目标的机器语言代码。
目标文件由段组成,通常至少有两个段:
代码段:包换主要程序的指令。该段是可读和可执行的,一般不可写
数据段:存放程序用到的全局变量或静态数据。可读、可写、可执行。
这个过程将.s文件转化成.o文件。
2.连接过程
由汇编程序生成的目标文件并不能立即就执行,还要通过链接过程。
原因:1).某个源文件调用了另一个源文件中的函数或常量
2).在程序中调用了某个库文件中的函数
链接程序的主要工作就是将有关的目标文件连接起来。
这个过程将.o文件转化成可执行的文件。
总结
预编译处理(.c) -> 编译、优化程序(.s)->汇编程序(.obj、.o、.a、.ko) -> 链接程序(.exe、.elf、.axf等)
https://zhuanlan.zhihu.com/p/45402323
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-22 22:47 , Processed in 0.059625 second(s), 19 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表