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. IIS7下ajax报未定义错误

    项目之前在iis6环境下运行的很好,今天在WIN7下发布,结果居然报对象未定义错误,经过个把小时折腾,终于弄清楚原委. 在web.config中关于AjaxPro的设置,在IIS7.0(WIN7中使用 ...

  2. 数据库—SQL语句

    下列语句部分是Mssql语句,不可以在access中使用. SQL分类:   DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)   DML—数据操纵语言(SELECT,DEL ...

  3. ps应用

    1.选中图层 ctrl+鼠标左键(win) command+鼠标左键(mac) 2.初始化 右侧:图层,历史记录,信息(面板选项-rgb,文档尺寸,像素),字符 编辑-首选项-单位与标尺-像素 窗口- ...

  4. javascript判断iphone/android手机横竖屏模式的函数

    function orientationChange(){ switch(window.orientation) { case 0: // Portrait case 180: // Upside-d ...

  5. Find out files transfered via Bluetooth

    The case was about business secret and forensic guy did a physical acquisition from a smart phone. H ...

  6. selenium3.0.1调用firefox

    报错信息如下时: selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to b ...

  7. php 中常见的函数及系统常量

    1.判断是否存在某函数: function_exists('memory_get_usage'): 2.统计程序执行到某节点消耗的系统内存: memory_get_usage(); 3.当前访问目录的 ...

  8. NPM 相关

    1. 官方网站 https://docs.npmjs.com/ 2. 显示Global Module安装过什么 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font ...

  9. 后台js弹提示

    StringBuffer sb=new StringBuffer(); try{ sb.append("<script> location.href=\"member_ ...

  10. HTTP权威指南笔记-1.概述

    1.1 通讯 Web内容是存储在服务器上的,Web服务所使用的是HTTP协议,所以经常称为HTTP服务器.通讯过程为客户端(正常我们所使用的)发出请求,服务端根据客户端的HTTP请求响应相应数据,这就 ...