•预处理阶段
预处理器(CPP)根据以字符 #开头的命令,修改原始的 C 程序。比如hello.c 中第 1 行的#include < stdio.h> 命令告诉预处理器读取系统头文件stdio.h 的内容,并把它直接插入程序文本中。结果就得到了另一个 C 程序,通常是以.i 作为文件扩展名。
•编译阶段
编译器(ccl)将文本文件 hello.i 翻译成文本文件 hello.s, 它包含一个汇编语言程序。该程序包含函数 main 的定义
定义中的每条语句都以一种文本格式描述了一条低级机器语言指令。
汇编语言是非常有用的,因为它为不同高级语言的不同编译器提供了通用的输出语言。例如,C 编译器和 Fortran 编译器产生的输出文件用的都是一样的汇编语言。
•汇编阶段
接下来,汇编器(as)将 hello.s 翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序(relocatable object program)的格式,并将结果保存在目标文件 hello.o 中。hello.o文件是一个二进制文件,它包含的 17 个字节是函数 main的指令编码。如果我们在文本编辑器中打开 hello.o文件,将看到一堆乱码。
•链接阶段
请注意,hello 程序调用了 printf 函数,它是每个 C 编译器都提供的标准 C 库中的一个函数。printf 函数存在于一个名为 printf .o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的 hello.o 程序中。链接器(Id)就负责处理这种合并。结果就得到 hello 文件,它是一个可执行目标文件(或者简称为可执行文件), 可以被加载到内存中,由系统执行。
编译文件的命令:
生成hello.i || gcc hello.c -o hello.i -E
生成hello.s|| gcc hello.c -o hello.s -S
生成hello.o|| gcc hello.c -o hello

深入理解计算机系统:hello程序的编译过程,如何用命令编译出hello.i、hello.s、hello.o的文件相关推荐

  1. 反编译与反汇编、C++编译过程,包括预编译--汇编--编译--链接

    参考:C/C++程序编译流程(预处理->编译->汇编->链接) - ProLyn - 博客园 反汇编和反编译的区别_代码小卒_新浪博客 反汇编与反编译: 汇编:是把汇编源程序转变为目 ...

  2. Java编译过程、c/c++编译过程区别

    Java编译原理 1.Java编译过程与c/c++编译过程不同 Java编译程序将java源程序编译成jvm可执行代码--java字节码. c/c++编译过程: 当C编译器编译生成一个对象的代码时,该 ...

  3. linux 编译链接过程,编译程序 一:linux程序编译过程(一)-编译和链接

    大家肯定都知道计算机程序设计语言通常分为机器语言.汇编语言和高级语言三类.高级语言需要通过翻译成机器语言才能执行,而翻译的方式分为两种,一种是编译型,另一种是解释型,因此我们基本上将高级语言分为两大类 ...

  4. adb: createprocessw failed: 系统找不到指定的路径_gcc编译过程、gcc命令参数、静态库和动态库搜索路径...

    一.gcc编译过程 gcc -E hello.c -o hello.s //预处理 gcc -S hello.s -o hello.i //编译 gcc -c hello.i -o hello.o / ...

  5. 行程单图片python预处理_GCC编译过程(预处理-gt;编译-gt;汇编-gt;链接)

    前言 如果你使用集成环境开发.那么你点击编译按钮就可生成可执行文件.但是C程序从源代码到二进制行程序都经历了那些过程?你知道吗?这些过程集成开发环境在点击编译按钮后都做完了,如果编译没有出错,即可生成 ...

  6. C语言:gcc编译过程及make命令、makefile语法规则

    gcc编译过程 编译过程: make && makefile make概述 makefile语法规则 make命令格式 Makefile案例 之所以写成多个文件,是出于模拟多模块编程的 ...

  7. 简诉android源代码编译过程,Android源码编译过程及原理(二)

    在未来等风也等你 本节主要记录的内容anroid 编译系统的结构 编译中枢中main.mk的基本解析 除非特别说明本节中的目录都是基于android的源码目录 1. android 编译系统的结构 a ...

  8. 简述android源代码的编译过程,Android源码编译过程详述

    首先说一下,编译Android所用的系统,目前ubuntu是比较好的平台,也是官方推荐的,但具体版本,说的都比较少,为了避免大家走弯路,我 这里说一下,最好的就是ubuntu 8.10,他所带有的各个 ...

  9. c语言编译过程及对应命令

    以前搞编程都是IDE,虽然也知道编译这么几个步骤,但如何实现还真不是太清楚,工作在搞linux内核驱动开发,平时做个实验也只是:gcc hello.c -o hello. 前段时正好在看些汇编,也就顺 ...

最新文章

  1. 惊艳!基于RNN的AI写词机竟能写出如此优秀的情诗!
  2. (一)SOA学习-相关缩写
  3. C语言有三个电阻r1r2r3,[VR虚拟现实]ARM硬件试题库及答案(37页)-原创力文档
  4. oracle中游标的使用
  5. Struts2 返回 json 格式数据
  6. 注解的定义与反射调用
  7. 【解决有些jar包依赖就是下载不下来】
  8. 宇枫资本投资理财的几大定律
  9. IPv6动态地址DNS解析
  10. 数十亿红包,正谋杀我们的春节
  11. 程序员算法趣味题:落单的男女
  12. Lytro Power Tool使用记录
  13. hibernate c0p3 mysql_COP3详细配置说明
  14. 5、中小企业网络架构-核心层交换机基本配置
  15. Socket编程入门C++
  16. HTML基础--CSS样式表(二)
  17. Jmockit对类静态方法mock
  18. 有史以来最困难的问题
  19. python成绩统计及格学平成_基于深度学习的目标检测算法综述
  20. 使用Cesium for Unreal插件构建航班轨迹

热门文章

  1. 标题隐藏_平静的标题下隐藏着不平静的天气,敢不敢点开?
  2. 密码学报Latex模板使用pdf转换成word
  3. 淘宝店铺订单同步解决方案-摘记
  4. GAN(Generative Adversarial Network)
  5. 新造车的2022:特斯拉神话破灭,蔚小理还不算赢
  6. vs报错“错误 LNK2019 无法解析的外部符号”的几种原因及解决方案
  7. ueditor单图片上传没有触发afterinsertimage事件
  8. python:__init__( )方法
  9. 公司举办了春节联欢晚会
  10. 利用css实现元素水平垂直居中的方法(分情况讨论)