http://blog.csdn.net/gengyichao/article/details/6544266

一 以下是C程序一般的编译过程:

从图中看到:

将编写的一个c程序(源代码 )转换成可以在硬件上运行的程序(可执行代码 ),需要进行编译阶段  和链接这两个阶段。

其中,

1.  编译阶段先通过“编译器 “把一个 .c / .cpp 源代码 编译成 .s的汇编代码 ;再经过“汇编器 ” 把这 个.s的汇编代码汇编成 .o 的 目标代码

2.  “连接器 “ 通过连接其他 .o 代码(如果需要的话) 库文件 和 1 中的.o 目标代码生成可执行文件

该文件流被这三种程序(红色)的加工,分别表现出四种形式(蓝色) ,这就是c程序的编译和链接过程。如果再详细的话,编译器在将源文件编译成汇编文件的过程又分为:预处理阶段(生成 .i代码) 和  优化阶段

二、C编程中的文件后缀名介绍

    .c 未经过预处理的C源码
    .h C头文件  
    .i 经过预处理的C源码

.s 生成的汇编语言代码 
    .o 编译之后产生的目标文件
    解释:*.c一般使我们自己编辑的代码,使我们劳动的结晶;*.h一般是我们手工生成的接口文件,如果愿意,也可在*.c完成后用GCC的选项-aux-info帮我们生成;*.i是经过预处理后的源码,是由GCC在选项-E编译下自动生成的文件;*.o是编译后产生的目标文件;*.s是GCC在选项-S编译下生成的汇编语言代码,对于性能要求很高的程序可以先生成汇编语言文件并对汇编做优化,然后用优化后的汇编生成目标文件并链接

三 演示 hello.c 的编译 过程(Linux 下 Gcc)

本小节的演示都针对文件 hello.c 进行

   1. /*
   2.  * hello.c
   3.  */
   4.
   5.   #include <stdio.h>
   6.   int  main()
   7.   {
   8.     printf(" Better goal, Better life! /n");
   9.     return 0;
  10.   }

1.生成预处理后的文件 hello.i

$ gcc -E hello.c -o hello.i

2 .生成汇编语言文件 hello.s

$ gcc -s hello.i -o hello.s

3.生成目标文件 hello.o

$ gcc -c hello.i
      $ gcc -c hello.s

4. 生成可执行文件

$ gcc -o hello hello.o

5. 运行及结果

$ ./hello

Better goal, Better life!

当然也可以直接生成, $ gcc -c hello.c  就可以生成可执行文件。这是Gcc内部的事。但就算是跳跃也要经过一步步的翻译, 原理是相似的,万变不离其宗!

什么是交叉编译?

母鸡  没搜索到明确的

特别喜欢最后一句话

作者:奇墨迹
链接:https://www.zhihu.com/question/52231322/answer/131137498
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

那啥我说一声哈,左下角那个是点赞的^O^
☞☞☞☞☞☞☞☞分割线☜☜☜☜☜☜☜

十几年前我还很小的时候,我们还很穷,干什么都不成。
报纸上天天在讨论温饱问题,说贫困村一家人只有一条裤子,港澳台同胞就像是天外来客,吃穿用度都让人嫉妒成恨。
那时候,美国有个总统叫克林顿,他英俊潇洒风流倜傥指哪打哪。
海湾战争让所有的中国军人崩溃,泪流满面的说,原来打仗已经变成了这样。
在电视里看到台海危机,大人们都紧张兮兮。后来才知道,那时候是真的担心会输。
再后来,南斯拉夫大使馆被炸了,我们很愤怒,却也只能愤怒。
全中国都在关心克林顿的下半身,因为除了这个,美国再没有什么可以嘲笑的了。
我们努力开工厂,卖玩具,卖衣服,上亿劳工从内地来到沿海。
他们说,8亿件衬衫能换一架飞机。
那时候,海里没有大船,主力还是炮艇。
歼十是了不起的最高机密,一般人我们都不告诉他。
世界在不断改变,改变……
我们还是很穷,好像干什么都不成。
报纸上不在出现温饱二字,而是在讨论民生问题。
贫困村不再只有一条裤子,留守儿童成了新的难题。台湾开通了自由行,去过的朋友都说也不过如此。
GDP超越了德意志,干掉了小日本,发电量超越了美利坚。这是人类历史上的第一次。
世界上最大的钢铁生产国是中国,第二是河北,第三是唐山,我们不再捉襟见肘,开始担心产能过剩环境污染。
美国换了总统,又换了总统,他们打了伊拉克,又打了阿富汗,再打了利比亚,最后没钱打叙利亚。
那个愁眉苦脸的小黑干的很苦逼,国会忙着吵架,政府等待关门,我们不再对波士顿惨案幸灾乐祸。
台独还在折腾,大人们却不再紧张。
反而说,嗨,小马哥长的不错。
吉利买了沃尔沃,联想成了PC全球第一。
我们造了全球一半的高铁,日法德加在忙着争论,是谁让中国偷走了核心技术。
我们把机床卖给了德国,把导弹卖进了北约。
美国人宣布判决,说中兴和华为是邪恶企业。哦当然,这份名单上还有北方工业和中国精密机械。
航母已经成军,舰载机挂弹起飞。
歼十不再是稀罕,我们告诉一般人,歼二十已经试飞。
卫星忙着编队,导弹打进了太空。
我们说,那就自己建一个太空站吧。
时间在不停的走远,走远……
有一半的欧美人说,中国才是最强经济体。
生活越来越好,问题越来越多,视野越来越广,想要的也越来越复杂。
但回想过去,我们已经站在近百年来最好的时候。
本朝已承平60年有余,按我中华之惯例,应该准备迎接盛世了。
我们又成了世界上最牛逼的那几个国家,但那也没什么可以骄傲的,在过去的几千年里,我们常常如此。

就像我爱你,不仅仅是今天。(转)作者桔子树

关于一个程序的编译过程 zkjg面试的更多相关文章

  1. Linux C程序的编译过程

    Linux C程序的编译过程 学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. /*test.c     了解C程序的编译*/ #include <s ...

  2. WPF 程序的编译过程

    原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...

  3. C#程序的编译过程

    C#程序的编译过程,如下图 总结:编译器将C#代码编译成DLL/EXE,DLL/EXE包含metadata(清单数据,对代码的描述)和IL(中间语言),IL(中间语言)经过CLR/JIT第二次编译才是 ...

  4. 第一部分 记事本搞定第一个C#程序和编译过程剖析

    记事本搞定第一个C#程序 进行下面三个步骤:编码,编译和托管运行. 1.记事本进行编码: using System; class Program{ public static void Main() ...

  5. 【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程

    一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...

  6. gcc 学习笔记(一) - 编译C程序 及 编译过程

    一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...

  7. C语言简短程序gcc编译过程

    一.建立一个×.c源文件.这里起名:rocks.c 二.编辑源代码,在c源文件内输入如下代码: #include <stdio.h> int main() { puts("C R ...

  8. Java程序的编译过程?由.java 到.class的过程?

    Javac是一种编译器,它的任务就是将Java源代码语言转化为JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言 词法分析器:读取源代码,一个字节一个自己的读取出 ...

  9. c++应用程序文件的编译过程

    这里讲下C++文件的编译过程及其中模板的编译过程: 一:一般的C++应用程序的编译过程.     一般说来,C++应用程序的编译过程分为三个阶段.模板也是一样的. 在cpp文件中展开include文件 ...

随机推荐

  1. C#读取Excel遇到无法读取的解决方法

    C#读取Excel遇到无法读取的解决方法:1.在导入数据连接字符串中,将IMEX=1加入,“Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\ ...

  2. Spring知识汇总

    Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅 ...

  3. JS数组转成json字符串的注意事项

    在js中常常会将一个数组转成json字符串发送给后端. 这时候在定义数组数据结构的时候需要格外注意,意味json中是有集合和对象的区别的. 集合的定义是[];对象的的定义是{}. 这时候,在创建数组时 ...

  4. Maximo子表中增加附件功能

    附件功能的实现(详见ewell.webclient.beans.warranty.WarrantysDateBean ,ewell.webclient.beans.doclinks.custom.Ad ...

  5. 常用的dos命令

    cd 进入一个目录 cd .. 返回上一个目录 dir 遍历目录 上下键 查找输入过的命令 Tab键 命令自动补齐

  6. Sublim Text3快捷键大全

    Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格 ...

  7. HTML标签拾遗

    在日常的开发过程中,经常与HTML标签打交道,常用的标签往往是那么几个,在此记录下后续可能会用到的html标签,或许会有意向不到的奇效.全部内容来自w3cschool. <abbr>   ...

  8. canvas知识点

    看到网上某些特别好看的效果,就突然想看看这个canvas; canvas是html5中的一个标签.所以兼容的是Internet Explorer 9.Firefox.Opera.Chrome 和 Sa ...

  9. Visual Studio 2015 工具箱丢失

    网上主要的解答分为两种:1. 未打开设计界面 2. 重置 实际上,还有一个原因是,没有启动完整版的VS. 安装完后,会有两个VS的程序,一个是Blend For Visual Studio 2015, ...

  10. ATL开发 ActiveX控件的 inf文件模板

    ATL开发 ActiveX控件的 inf文件模板