今天面试海康威视嵌入式开发的时候,面试官问了我一个问题,一个程序是如何变成可执行程序的,记得学过,但是没回答出来,今天回来翻了csapp的课本,找到了答案记录一下

基本过程(以hello.c举例):

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

生成.i预处理文件指令:

gcc -E hello.c -o hello.i

生成前后文件对比:

左边市stdio.h文件,右边是我们生成的hello.i文件可以发现hello.i文件中插入了stdio.h文件中除了注释的内容

编译阶段:编译器(ccl)将文本文件 hello.i翻译成文本文件hello.s,它包含一个汇编语言程序

生成.s汇编语言文件指令:

gcc -S hello.i -o hello.s

格式如下:

定义中9~23不带前缀.就是main函数的汇编语言

汇编阶段:接下来,汇编器(as)将hello.s翻译成机器语言指令把这些指令打包成一种可重定位程序的格式,并将结果保存在目标文件hello.o中。hello.o文件是一个二进制文件,这是机器能读懂的程序

链接阶段:hello程序中调用了printf函数,它是每个C编译器都提供的标准C库中的一个函数。printf函数存在于一个名为printf.o的单独的预编译好了的目标文件中,而这个文件必须以某种方式合并到我们的hello.o文件中。链接器(ld)就负责处理这种合并。结果就得到hello文件,它是一个可执行目标文件,可以被加载到内存中,由系统执行

c语言中一个程序的运行过程相关推荐

  1. C语言中一个程序写完后怎么运行啊?

    C语言中一个程序写完后怎么运行啊? 当编写bai完一个程序后,需要首先进行编译,然后再运行. 如下图所示,程序编写完毕后,点击工具栏中的Execute,选择compile(编译). 如果没有错误,再选 ...

  2. Loadrunner11录制过程中报错:由于另一个程序正在运行中,此操作无法完成

    第一次安装LR11录制没有问题,第二次录制也没有问题,后面第二天录制就出现了如下截图的现象  报错内容:由于另一个程序正在运行中,此操作无法完成.请选择"切换到"来激活正在运行中的 ...

  3. 学习Java第一天:1、Java是什么?2、面向对象的编程思想的特点 3、Java的开发工具 4、安装JDK和配置环境变量 5、Java程序的运行过程 6、Java语言的特点

    目录 1.Java是什么? 2.面向对象的编程思想的特点 3.Java的开发工具 4.安装JDK和配置环境变量 5.Java程序的运行过程 6.Java语言的特点 1.Java是什么? java是一门 ...

  4. 服务器在运行中,由于另一个程序正在运行中,此操作无法完成

    Visual Studio2008中用excel automation读取Excel文档,有时会程序提示"由于另一个程序正在运行中,此操作无法完成.请选择'切换到'来激活正在运行中的程序,并 ...

  5. python输入一个正整数n求下列算式的值_C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值。,C语言 编写一个程序,输入一个正整数,求出它是几位数。...

    导航:网站首页 > C语言编写程序:输入一个正整数x和一个正整数n,求下列算式的值.,C语言 编写一个程序,输入一个正整数,求出它是几位数. C语言编写程序:输入一个正整数x和一个正整数n,求下 ...

  6. idea调试怎么跳出循环_使用IDEA的Debug调试功能,查看程序的运行过程

    Debug追踪,使用IDEA的断点调试功能,查看程序的运行过程 知乎视频​www.zhihu.com 1. 在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序 ...

  7. hello程序的运行过程-从计算机系统角度

    hello程序的运行过程-从计算机系统角度 1.gcc编译器驱动程序读取源程序文件hello.c,并将它翻译成一个可执行目标文件hello.翻译过程分为四个阶段:预处理阶段,编译阶段,汇编阶段,链接阶 ...

  8. c语言编程等腰三角形,用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形?...

    导航:网站首页 > 用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形? 用c语言编辑一个等腰三角形的讲解过程 一个等腰三角形怎么平均分成三个面积相等的三角形? ...

  9. Mybatis之一个SQL的运行过程

    阅前必读: 本文测试项目及相关总结资料,均放置在文末链接处.强烈建议去拽下来,看xmind脑图并结合源码进行理解. 本人是先绘制的xmind脑图,然后根据xmind脑图发的此博文,无论是可读性.还是层 ...

最新文章

  1. 洛谷 p3372 模板-线段树 1
  2. ustc小道消息20211225
  3. Java能做什么?学完Java可以从事什么工作呢?
  4. postman post gin 接收不到_golang web开发——gin实战入门
  5. 微软最强命令行工具 Windows Terminal,强势霸榜GitHub
  6. OSGi环境中的Servlet基本身份验证
  7. linux-vim-环境永久-多窗口操作
  8. 聪明的ITPRO之二IT人做事要“圆”
  9. 清华ACL'22 | 一文读懂刘知远所在实验室18篇论文详情
  10. 基于Web的物流配送信息管理系统
  11. PostgreSQL遍历Json
  12. Python3,9行代码进行压缩和解压缩,从此告别压缩软件。
  13. 牛腩新闻发布--触发器语句
  14. 逻辑回归原理梳理_以python为工具 【Python机器学习系列(九)】
  15. css图像描边,纯CSS实现帅气的SVG路径描边动画效果
  16. ch19.PDO。p360---练习三。通过pdo更新数据
  17. 怎么快速发表期刊论文
  18. 学习软件工程的知名网站
  19. 怎么获取apk的包名??
  20. 我认识的几个哈工大本科生毕业后出路

热门文章

  1. 生物学和计算机科学结合的学科,生物信息学和计算生物学
  2. 可能认识的好友!查询!
  3. 得胜php100怎么样,优缺点爆料得胜TA-60评价如何?怎么样呢?内行分析实际情况...
  4. presto大数据中报错,line 50:5: mismatched input 'and'. Expecting:,可能原因为
  5. 苹果电脑能玩什么游戏_什么是苹果的游戏中心,您应该使用它吗?
  6. AI 以 5:0 比分击败美顶级飞行员;经典对抗攻击 Deepfool 原理详解
  7. Java张孝祥视频 学习笔记 代理
  8. 深深的码丨Java NIO 透析
  9. 中国49城市智慧程度排行榜:新一线城市武汉和杭州靠前
  10. 计算机内容的ppt,电脑打开ppt文件出错提示ppt中的内容有问题如何解决