目录

  • 文件生成过程
  • 编译整个过程

文件生成过程

文件生成的过程通常包括以下步骤:

1、编写源代码:在本地计算机上使用文本编辑器编写程序源代码文件,文件通常以特定的文件扩展名结尾,如.c、.cpp、.h等。

2、预处理:使用预处理器处理源代码,例如,可以使用C预处理器将包含指令替换为其相应的文件内容。预处理的输出是一个经过修改的源代码文件。

3、编译:编译器将经过预处理的源代码文件编译成机器代码。编译器执行的操作包括词法分析、语法分析、语义分析、中间代码生成和代码优化等。

4、链接:链接器将编译器生成的目标文件和库文件结合起来形成可执行文件或动态链接库。

5、构建:构建工具使用一系列规则和依赖项来构建和管理项目。构建过程包括对源代码进行编译、链接、测试、打包和部署等操作。

6、安装:将构建后的二进制文件安装到目标系统中,通常包括将文件复制到适当的目录结构中、设置文件权限和运行脚本等操作。

以上步骤可能因编程语言、编译器、操作系统和构建工具的不同而有所不同。

编译整个过程

编译过程是将源代码转化为可执行程序或库的过程。一般来说,编译过程可以分为以下几个步骤:

1、预处理:编译器对源代码进行宏替换、头文件展开、条件编译等操作,生成预处理文件。
下面以 C++ 代码为例,介绍整个编译过程:
预处理:使用预处理器对源代码进行处理,生成预处理文件。

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

在预处理阶段,g++ 编译器会对 main.cpp 进行宏替换、头文件展开、条件编译等操作,生成预处理文件 main.i。

2、编译:将预处理文件翻译成汇编代码或机器码,生成汇编代码或目标文件。
编译:将预处理文件翻译成汇编代码或机器码,生成汇编代码或目标文件。

$ g++ -S main.i -o main.s
$ g++ -c main.s -o main.o

在编译阶段,g++ 编译器将预处理文件 main.i 翻译成汇编代码 main.s,再将汇编代码 main.s 翻译成目标文件 main.o。

3、汇编:将汇编代码翻译成机器码,生成目标文件。

4、链接:将目标文件与库文件链接,生成可执行程序或库。
链接:将目标文件与库文件链接,生成可执行程序或库。

$ g++ main.o -o main

在链接阶段,g++ 编译器将目标文件 main.o 与所需的库文件链接,生成可执行程序 main。

文件生成过程编译过程相关推荐

  1. C和指针之预处理器之普通c/c++文件的编译过程

    1.简单总结c/c++文件的编译3个过程 1).预处理器进行预编译   比如我们测试这段代码 #include <stdio.h>int main() {printf("hwll ...

  2. C++头文件和源文件,编译过程

    源文件如何根据#include来关联头文件  1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来, ...

  3. C++头文件和源文件的编译过程

    源文件如何根据#include来关联头文件 1.系统自带的头文件用尖括号括起来,这样编译器会在系统文件目录下查找. #include <xxx.h> 2.用户自定义的文件用双引号括起来,编 ...

  4. sqc文件的编译过程

    针对DB2的嵌入式开发的SQC代码文件,从SQC文件编译成可实行文件的过程,在一般情况下都是通过这本程序的make文件进行编译的,在这里对这个编译过程做一个简单的说明. 1.首先把自己编辑好的SQC文 ...

  5. MDK的编译过程及文件类型全解——(二)

    前言: 为了方便查看博客,特意申请了一个公众号,附上二维码,有兴趣的朋友可以关注,和我一起讨论学习,一起享受技术,一起成长. 本文转载自:第48章 MDK的编译过程及文件类型全解-零死角玩转STM32 ...

  6. 第48章 MDK的编译过程及文件类型全解

    Frm: http://www.cnblogs.com/firege/p/5806134.html 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教 ...

  7. 第48章 MDK的编译过程及文件类型全解—零死角玩转STM32-F429系列

    第48章     MDK的编译过程及文件类型全解 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.co ...

  8. uboot配置和编译过程详解

    ▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ 分享一个大神朋友的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到 ...

  9. iOS App 的编译过程

    在 iOS 开发的过程中,Xcode 为我们提供了非常完善的编译能力,正常情况下,我们只需要 Command + R 就可以将应用运行到设备上,即使打包也是一个相对愉快的过程. 但正如我们写代码无法避 ...

最新文章

  1. 又跌了!7 月程序员工资平均 14357 元 | 原力计划
  2. 【SignalR学习系列】4. SignalR广播程序
  3. ListItem.Update与ListItem.SystemUpdate
  4. 【BZOJ-3156】防御准备 DP + 斜率优化
  5. scala获得成员函数列表
  6. java web 润乾报表教程_润乾报表开发 基础教程.ppt
  7. 开发过程中的注意事项,想到哪写到哪
  8. 安装谷歌插件 ~ 一招轻松解决
  9. java打印等腰三角形_可打印丨四年级数学易错易失分的26个知识点总结(附例题+答案),给孩子收藏!...
  10. Emscripten 单词_分享15个英语单词记忆方法,简单实用,赶紧收藏吧!
  11. MySQL中IN子查询会导致无法使用索引
  12. eclisp导入jsp项目之基础
  13. 实用的活动报名微信小程序应用
  14. 【论文学习】Cooling-Shrinking Attack: Blinding the Tracker with Imperceptible Noises论文学习
  15. mongoDB占内存超大的问题-100MB数据,内存吃到22GB?
  16. 迅雷链基于智能硬件的DPoA共识机制介绍
  17. mysql innodb_large_prefix
  18. 海量数据搜索、存储、查询、排序算法
  19. 7-148 试试多线程 (10 分)
  20. 苹果电脑装双系统Parallels Desktop虚拟机你需要知道,是否适合装虚拟机?

热门文章

  1. UML(Jude) | UseCase Diagram
  2. 用友2020校招java笔试题_2020年快手校招JAVA岗笔试第三题-Go语言中文社区
  3. 利用python检测IP地址变化并触发事件
  4. 基于微信JAVA后台校园小程序系统设计与实现 开题报告
  5. 复盘2018,展望2019(上)
  6. 利率风险结构和期限结构
  7. 全屏时程序坞自动隐藏的方法
  8. 《Undocumented Windows 2000 Secrets》翻译 --- 第四章(6)
  9. undo系列学习之undo入门基础知识介绍
  10. 台式机拷盘加固态硬盘(SSD)