程序编译的四个过程

2018年01月17日 23:04:19 Hello_hpc 阅读数:423

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_33604078/article/details/79091049

编译程序生成可执行文件四个阶段:

GCC驱动程序读取源文件.c比如hello.c,并把它翻译成一个可执行目标文件hello,需要经历一下四个阶段,如下图示:

预处理阶段。预处理器(cpp)根据以字符#开头的命令,修改原始的C程序。比如hello.c中第一行的#include<stdio.h>命令告诉预处理器读取系统头文件stdio.h的内容,并把它直接插入程序文本中,结果就得到了另一个C程序,通常是以.i作为文件扩展名。

编译阶段。编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。汇编语言程序中的每条语句都以一种标准的文本格式确切的描述了一条低级机器语言指令。

汇编阶段。汇编器(as)将hello.s翻译成机器语言指令,把这些指令打包成一种可重定位目标程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,它的字节编码是机器语言指令而不是字符,如果我们在文本文件中打开hello.o文件,看到的将是一堆乱码。

链接阶段。链接器(ld)负责处理合并目标代码,生成一个可执行目标文件,可以被加载到内存中,由系统执行。

GCC和G++的区别和联系:

gcc和g++都是GNU(一个组织)的编译器。

1、对于.c后缀的文件,gcc把它当做是C程序;g++当做是C++程序;

2、对于.cpp后缀的文件,gcc和g++都会当做c++程序。

3、编译阶段,g++会调用gcc;

4、连接阶段,通常会用g++来完成,这是因为gcc命令不能自动和c++程序使用的库连接。

3月25日 编译的四个过程相关推荐

  1. 2021年1月25日 星期一 农历四九尾 雾霾 天津

    外出整整12个小时,从早上8点40分到下午8点40.早上步行到5号线的成林道地铁站,经5号线倒6号线,再从6号线倒3号线到碰头地华苑地铁站.用时1个小时零15分钟. 夏帆已经驾车在出口处等着了.坐上副 ...

  2. 全国计算机四六级报名时间2015,2015年英语四六级口语考试报名时间:10月25日起...

    出国留学网英语栏目提示:2015年11月六级口语考试即将开始报名,请跟着小编一起阅读以下的口语考试相关事宜. 全国大学英语四.六级委员会办公室最新发布的<2015年11月全国大学英语四.六级口语 ...

  3. 华为u9508荣耀2四核 Emotion UI B530精简ROOT刷机包【安全线刷模式,11月25日更新】

    首先解释下为什么用线刷吧!因为如果用卡刷方式也逃不过必须用线刷辅助的命运,索性给做成线刷得了. ROM内容: 1.加入超级用户和ROOT权限,RE管理器 2.适当精简部分自带的第三方程序,还是自己安装 ...

  4. 第四范式陈雨强:万字深析工业界机器学习最新黑科技 By 机器之心2017年7月25日 16:38 近日,全球最顶级大数据会议 Strata Data Conference 在京召开。Strata 大

    第四范式陈雨强:万字深析工业界机器学习最新黑科技 By 机器之心2017年7月25日 16:38 近日,全球最顶级大数据会议 Strata Data Conference 在京召开.Strata 大会 ...

  5. Vue教程-day05-2018年12月25日笔记

    文章目录 第79个视频 - webpack less文件的处理 考试 第80个视频 - webpack - 图片文件的处理 jpg和jpeg 效果分析 大图片 图片路径问题 注意点 总结 考试 第81 ...

  6. 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)

    day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...

  7. Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日)

    Silverlight/Windows8/WPF/WP7/HTML5周学习导读(6月25日-7月1日) 本周Silverlight学习资源更新 用Silverlight做淘宝应用 往事如锋 基于 Si ...

  8. 【Flutter】Flutter 开发环境搭建 ( 2021年08月25日 补充最新资料 | 最新安装教程 )

    文章目录 前言 一.Android Studio 环境安装 Flutter / Dart 插件 二.Flutter SDK 下载 三.设置 Flutter 环境变量 1.设置 Flutter SDK环 ...

  9. 不停机上线服务_【必看】10月25日本市增值税发票管理系统停机前,这些事一定要办...

    2019年11月1日市税务局将上线增值税发票管理系统2.0版. 新系统上线过渡期间(10月25日-10月31日)部分业务将暂停办理. 详情如下: 一 暂停时间 2019年10月25日0:00-10月3 ...

  10. 王者服务器维修2019年四月份,王者荣耀4月25日更新内容 王者荣耀2019年4月25日全服不停机更新公告...

    王者荣耀在2019年4月25日早上8点半对全服进行不停机更新,本次更新后会上线王者快跑活动玩法,还有2019年的55开黑节的第一波活动,下面小编为大家带来了王者荣耀2019年4月25日全服不停机更新公 ...

最新文章

  1. Java计算两个时间差
  2. python程序的执行顺序_Python方法中的执行顺序
  3. SwipeRefreshLayout里面需要注意的Api
  4. 威纶触摸屏使用说明书_MODBUS通信之触摸屏与变频器通信知识分享(一)
  5. C++ opengl 点的绘制
  6. Hibernate学习(1):查询demo
  7. expect脚本教程_Expect脚本SSH示例教程
  8. 【Deep learning】NLP
  9. 大数据真实电商数据仓库全流程开发详解
  10. 打印工资条怎么做到每个人都有表头明细_快速制作工资条的方法
  11. 2020的迷之骗局:从瑞幸退市到老干妈炒鹅 | 凌云时刻
  12. css实现3D动画效果——正方体变六边形
  13. android x86 mip,mip-appdl
  14. 《德鲁克管理思想精要》读书笔记6 - 企业家战略
  15. 基于Java的NetCDF文件解析
  16. 关于快速记忆的原理和方法介绍
  17. Interval数据类型
  18. Filter为什么会在一次请求执行多次doFilter?
  19. python运维自动化老男孩_老男孩第十四期 python 自动化运维第二周
  20. TamerMonkey 百度直接下载助手

热门文章

  1. linux获取cpu数量函数,Linux上获取CPU Core个数的实现
  2. JSP技术-01-语法及运行原理
  3. 多线程(三)--多线程间通信
  4. java输出流文件_Java文件输入输出流(封装类)
  5. 深度系统优化工具_HiBit Uninstaller卸载工具【win版】
  6. oracle字段id加1,oracle 字段ID自动增1
  7. matlab size11,matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute
  8. 被替换的项目不是替换值长度的倍数_机器学习中处理缺失值的9种方法
  9. mysql 创建外键语句,MySQL 创建主键,外键和复合主键的语句 | 很文博客
  10. 简单使用_八角气囊如何使用简单介绍