Qter 发表于 2023-10-29 12:53:55

c++程序编译过程

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)等。https://pic4.zhimg.com/80/v2-31b981f353587e174475f025c26c93ab_720w.webp
源文件(.cpp)https://pic4.zhimg.com/80/v2-aacd5bf134bfc30b117324c9e81d948f_720w.webp
预处理之后文件(.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://pic3.zhimg.com/80/v2-3447b4cb63451a0a73e80a22eab7ff82_720w.webphttps://pic1.zhimg.com/80/v2-da58b56fe692187f85ae12f1b366a9a0_720w.webphttps://zhuanlan.zhihu.com/p/45402323
页: [1]
查看完整版本: c++程序编译过程