关于一个程序的编译过程 zkjg面试

时间:2024-06-12 15:37:08

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

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

关于一个程序的编译过程  zkjg面试

从图中看到:

将编写的一个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年有余,按我中华之惯例,应该准备迎接盛世了。
我们又成了世界上最牛逼的那几个国家,但那也没什么可以骄傲的,在过去的几千年里,我们常常如此。

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