关于一个程序的编译过程 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文件 ...
随机推荐
- 修饰符const,static与readonly
在c语言中,存储区可以分成代码区,全局区(用于存放全局变量和静态变量),常量区(用户存放常量),栈,堆. 首先介绍const,const是常量的标志,表示变量不可被修改.const变量,申明的时候就必 ...
- Have Fun with Numbers及循环链表(约瑟夫问题)
1. 循环链表(约瑟夫问题) https://github.com/BodhiXing/Data_Structure 2. Have Fun with Numbers https://pta.pate ...
- shallow copy 和 deep copy 的示例
本文属原创,转载请注明出处:http://www.cnblogs.com/robinjava77/p/5481874.html (Robin) Student package base; impo ...
- Ninject之旅之四:Ninject模块
摘要 随着应用程序的增长,注册的服务列表跟着变长,管理这个列表将变得困难.Ninject模块是一个好的将我们的类型绑定分离到不同的绑定组的方式,它很容易地将分组组织到不同的文件中.将一个类变成一个Ni ...
- YCSB测试Mysql,MongoDB,TokuMX,Couchbase性能
测试是由同事完成的,这里只做收藏. 测试说明: 1.数据量为3kw记录,每条记录11个字段,一个为主键,主键为字符类型,类似:user****,后续为数值 其他10字段为字符类型,100字符,记录长度 ...
- IIS7 IIS8 中多个版本php共存的方法
原文地址: https://blog.cozof.com/pieces/54.shtml 最近又重回.net,用回IIS.然后用到某个php开源项目,需要低版本的php,之前装的一个php5.5不能用 ...
- td的所有style
td.style.clear= td.style.posRight=0 td.style.backgroundRepeat= td.style.borderTopStyle= td.style.mar ...
- Mac下命令行中用sublime打开指定文件 设置方法
sublime2版本 官网提供的方法:sublime2 官网提供的方法是:ln -s "/Applications/Sublime Text 2.app/Contents/SharedSup ...
- Fisher vector for image classification
http://files.cnblogs.com/files/sylar120/fisher_vector.rar 拿各个参数上的偏导作为特征
- asp.net core获取自定义json的配置内容
首先在主目录下建立:Iyibank.Web.json文件 里边的内容如下: { "ConnectionStrings": { "RedisCache": &qu ...