关于一个程序的编译过程 zkjg面试
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
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
☞☞☞☞☞☞☞☞分割线☜☜☜☜☜☜☜
十几年前我还很小的时候,我们还很穷,干什么都不成。
报纸上天天在讨论温饱问题,说贫困村一家人只有一条裤子,港澳台同胞就像是天外来客,吃穿用度都让人嫉妒成恨。
那时候,美国有个总统叫克林顿,他英俊潇洒风流倜傥指哪打哪。
海湾战争让所有的中国军人崩溃,泪流满面的说,原来打仗已经变成了这样。
在电视里看到台海危机,大人们都紧张兮兮。后来才知道,那时候是真的担心会输。
再后来,南斯拉夫大使馆被炸了,我们很愤怒,却也只能愤怒。
全中国都在关心克林顿的下半身,因为除了这个,美国再没有什么可以嘲笑的了。
我们努力开工厂,卖玩具,卖衣服,上亿劳工从内地来到沿海。
他们说,8亿件衬衫能换一架飞机。
那时候,海里没有大船,主力还是炮艇。
歼十是了不起的最高机密,一般人我们都不告诉他。
世界在不断改变,改变……
我们还是很穷,好像干什么都不成。
报纸上不在出现温饱二字,而是在讨论民生问题。
贫困村不再只有一条裤子,留守儿童成了新的难题。台湾开通了自由行,去过的朋友都说也不过如此。
GDP超越了德意志,干掉了小日本,发电量超越了美利坚。这是人类历史上的第一次。
世界上最大的钢铁生产国是中国,第二是河北,第三是唐山,我们不再捉襟见肘,开始担心产能过剩环境污染。
美国换了总统,又换了总统,他们打了伊拉克,又打了阿富汗,再打了利比亚,最后没钱打叙利亚。
那个愁眉苦脸的小黑干的很苦逼,国会忙着吵架,政府等待关门,我们不再对波士顿惨案幸灾乐祸。
台独还在折腾,大人们却不再紧张。
反而说,嗨,小马哥长的不错。
吉利买了沃尔沃,联想成了PC全球第一。
我们造了全球一半的高铁,日法德加在忙着争论,是谁让中国偷走了核心技术。
我们把机床卖给了德国,把导弹卖进了北约。
美国人宣布判决,说中兴和华为是邪恶企业。哦当然,这份名单上还有北方工业和中国精密机械。
航母已经成军,舰载机挂弹起飞。
歼十不再是稀罕,我们告诉一般人,歼二十已经试飞。
卫星忙着编队,导弹打进了太空。
我们说,那就自己建一个太空站吧。
时间在不停的走远,走远……
有一半的欧美人说,中国才是最强经济体。
生活越来越好,问题越来越多,视野越来越广,想要的也越来越复杂。
但回想过去,我们已经站在近百年来最好的时候。
本朝已承平60年有余,按我中华之惯例,应该准备迎接盛世了。
我们又成了世界上最牛逼的那几个国家,但那也没什么可以骄傲的,在过去的几千年里,我们常常如此。
就像我爱你,不仅仅是今天。(转)作者桔子树
关于一个程序的编译过程 zkjg面试的更多相关文章
- Linux C程序的编译过程
Linux C程序的编译过程 学习一门语言程序,本人觉得还是得学习它的编译规则,现在,通过小例子小结下自己对C编译的认识. /*test.c 了解C程序的编译*/ #include <s ...
- WPF 程序的编译过程
原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...
- C#程序的编译过程
C#程序的编译过程,如下图 总结:编译器将C#代码编译成DLL/EXE,DLL/EXE包含metadata(清单数据,对代码的描述)和IL(中间语言),IL(中间语言)经过CLR/JIT第二次编译才是 ...
- 第一部分 记事本搞定第一个C#程序和编译过程剖析
记事本搞定第一个C#程序 进行下面三个步骤:编码,编译和托管运行. 1.记事本进行编码: using System; class Program{ public static void Main() ...
- 【嵌入式开发】gcc 学习笔记(一) - 编译C程序 及 编译过程
一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...
- gcc 学习笔记(一) - 编译C程序 及 编译过程
一. C程序编译过程 编译过程简介 : C语言的源文件 编译成 可执行文件需要四个步骤, 预处理 (Preprocessing) 扩展宏, 编译 (compilation) 得到汇编语言, 汇编 (a ...
- C语言简短程序gcc编译过程
一.建立一个×.c源文件.这里起名:rocks.c 二.编辑源代码,在c源文件内输入如下代码: #include <stdio.h> int main() { puts("C R ...
- Java程序的编译过程?由.java 到.class的过程?
Javac是一种编译器,它的任务就是将Java源代码语言转化为JVM能够识别的一种语言,然后由JVM将JVM语言再转化成当前这个机器能够识别的机器语言 词法分析器:读取源代码,一个字节一个自己的读取出 ...
- c++应用程序文件的编译过程
这里讲下C++文件的编译过程及其中模板的编译过程: 一:一般的C++应用程序的编译过程. 一般说来,C++应用程序的编译过程分为三个阶段.模板也是一样的. 在cpp文件中展开include文件 ...
随机推荐
- C#读取Excel遇到无法读取的解决方法
C#读取Excel遇到无法读取的解决方法:1.在导入数据连接字符串中,将IMEX=1加入,“Provider=Microsoft.Jet.OLEDB.4.0;Data Source="C:\ ...
- Spring知识汇总
Spring简介 Spring框架由Rod Johnson开发,2004年发布了Spring框架的第一版.Spring是一个从实际开发中抽取出来的框架,因此它完成了大量开发中的通用步骤,留给开发者的仅 ...
- JS数组转成json字符串的注意事项
在js中常常会将一个数组转成json字符串发送给后端. 这时候在定义数组数据结构的时候需要格外注意,意味json中是有集合和对象的区别的. 集合的定义是[];对象的的定义是{}. 这时候,在创建数组时 ...
- Maximo子表中增加附件功能
附件功能的实现(详见ewell.webclient.beans.warranty.WarrantysDateBean ,ewell.webclient.beans.doclinks.custom.Ad ...
- 常用的dos命令
cd 进入一个目录 cd .. 返回上一个目录 dir 遍历目录 上下键 查找输入过的命令 Tab键 命令自动补齐
- Sublim Text3快捷键大全
Ctrl+Shift+P:打开命令面板Ctrl+P:搜索项目中的文件Ctrl+G:跳转到第几行Ctrl+W:关闭当前打开文件Ctrl+Shift+W:关闭所有打开文件Ctrl+Shift+V:粘贴并格 ...
- HTML标签拾遗
在日常的开发过程中,经常与HTML标签打交道,常用的标签往往是那么几个,在此记录下后续可能会用到的html标签,或许会有意向不到的奇效.全部内容来自w3cschool. <abbr> ...
- canvas知识点
看到网上某些特别好看的效果,就突然想看看这个canvas; canvas是html5中的一个标签.所以兼容的是Internet Explorer 9.Firefox.Opera.Chrome 和 Sa ...
- Visual Studio 2015 工具箱丢失
网上主要的解答分为两种:1. 未打开设计界面 2. 重置 实际上,还有一个原因是,没有启动完整版的VS. 安装完后,会有两个VS的程序,一个是Blend For Visual Studio 2015, ...
- ATL开发 ActiveX控件的 inf文件模板
ATL开发 ActiveX控件的 inf文件模板