详解源文件编译链接至可执行程序的每一步-世界今头条
前言
本文利用C语言介绍源文件是如何一步一步地编译、链接成为可执行程序的。
(资料图片仅供参考)
一、编译链接总述
编译链接本身分为许多个过程,但从整体上可以概括为以下三点:
程序的每个源文件分别
通过编译器的编译,生成对应的目标文件。每个目标文件通过链接器链接在一起,形成一个独立单一而完整
的可执行文件。链接时会在链接库内搜索C标准库及程序员个人函数库
中的函数,并将其链接至可执行程序。整体过程如下图所示:
二、编译过程
阶段I 预处理
预处理,又叫预编译,源文件在进入编译器后要首先进行预处理操作,告诉编译器如何预处理的代码被称为预处理指令,常见的有头文件的包含,宏定义等。
经过预处理后的文件后缀会变为i
,文件以i
为后缀代表其已经过预处理,但未进行下一阶段的编译。
1)头文件的包含
在我们写代码时,包含头文件的是必不可少的,而在预处理中:包含头文件的操作等同于拷贝头文件中的代码,随后将源文件中的代码和头文件中的代码一起放入后缀为i
的文件中。
预处理前:
预处理后:
相当于将头文件中的代码拷贝至源文件的头部,同时删掉#include"head.h"
其效果与下面的代码相同,此时的文件后缀为i
。
struct MyStruct{int a;int b;};int main(){struct MyStruct s;return 0;}
2)宏定义的替换
在预处理时,源文件中宏定义内容会在i
文件中被直接替换。
预处理前:
#include#define MAX 100int main(){int a = MAX;printf("%d\n", a);return 0;}
预处理后:
预处理后MAX
会被直接替换为100
,同时删除前面的#define MAX 100
,其效果与下图代码相同。
3)注释的删除
在预处理时,编译器还会删除//
后面的内容以及被/* */
包括起来的内容,以便于接下来的编译阶段。
如图:
4)阶段总结
可以看到,不管是头文件、宏定义、还是注释,都是编译器对文本
的操作。
因此可以说:预处理阶段是编译器对文本的操作阶段。
阶段II 编译
当源文件经过预处理后,便开始第二个阶段——编译,经过编译的文件的后缀将变成s
,文件后缀为s
代表其已经经过第二阶段的编译,但未进行汇编操作。
编译阶段会将C语言代码进行语法分析
、词法分析
、词义分析
,以及符号汇总
。
1)主要操作
语法分析:检测是否有语法错误,检测语法格式是否正确等。词法分析:拆解语句或字符为关键字等。语义分析:翻译每条语句或关键字的意义。符号汇总:将代码中涉及的符号进行汇总,以便于在汇编阶段中形成符号表。2)阶段总结
编译阶段从整体上看是对C语言代码进行分析解读
由于该阶段涉及编译的原理,因此只了解大概即可,详见书籍《编译原理》。
阶段III 汇编
当源文件经过第一、二阶段后,便开始第三个阶段——汇编,经过汇编的文件的后缀将变成o或obj
,即开头所说的目标文件
,文件后缀为o或obj
代表其至少已经经过三个阶段的编译。
PS:在VS环境下生成的目标文件后缀为obj
,在GCC环境下生成的目标文件后缀为o
。
1)主要操作
将汇编代码翻译成二进制指令。形成符号表。2)符号表详解
在第二阶段的编译中会将代码中的全局变量
,函数名
等汇总,并在汇编阶段形成类似一张表格。
收集以下代码中的全局变量与函数名:
形成表格:
符号表的详细作用在链接时详细介绍。
名 | 址 | ... |
---|---|---|
val | 0X0012FF40 | |
add | 0X0012FF80 | |
main | 0X0012FF20 |
三、链接过程
链接主要包括合并段表
、符号表的合并及重定位
两大过程。
下面依次介绍。
I 合并段表
在源文件经过编译过程后文件后缀变为o
或obj
后,其内部的代码已经变成二进制。
此时,文件会将内部的二进制代码按类型
划分成许多部分,每一部分就被称为一段。
如图:
前文我们说到,多个目标文件经过链接器后整合为一个独立而完整的文件,因此链接中合并段表的意思就是把多个目标文件中对应的段,合并在一个目标文件内。
II 符号表的合并
顾名思义,将每个目标文件中的符号表合并成一个目标文件的符号表。
III 符号表的重定位
如果在写代码时发生函数定、声明、使用等不在同一源文件等情况,那么多个目标文件的符号表中可能都会有相同的函数名及无效的地址,像这样:
如上图,在两个文件中都有add的存在,那么,在head.obj
和源.obj
的符号表中都会有收录add。
但因源.c
中没有对add进行实现,因此在汇总源.c
的符号表时,其地址会被填入一个无效的地址。
在链接过程中,链接器不仅会对符号表合并,也会将多余的符号删除,同时将每个符号的地址都定位为所有地址中有效的那一个。
IIII 找不到符号报错
如果在写代码时不小心将函数名写错了,像这样:
那么由于在head.h
汇总符号表时找不到代码实现,就会把Add
的地址赋为一个无效的地址,像这样:
名 | 址 |
---|---|
Add | 0X00000000 |
add | 0X0012FF40 |
但是,在符号表的重定位时,也没有重定位Add的有效地址,那么链接就无法完成,就会报出典型的错误:
PS:函数声明extern
的作用就是告诉编译器,遇到无法解释的符号先别急着报错,后面会有定义的。
四、全文总结
多个源文件经过预处理(头文件包含、宏定义替换、注释的删除),编译(语法分析、词法分析、词义分析、符号汇总),汇编(二进制指令翻译、形成符号表)后成为一个目标文件。
多个目标文件在链接库的帮助下完成合并段表,符号表合并,符号表重定位后整合为一个目标文件。
到最后变成一个可执行的exe文件。
感谢您的阅读与耐心~
-
2023-02-13 23:15:35
详解源文件编译链接至可执行程序的每一步-世界今头条<
预处理,又叫预编译,源文件在进入编译器后要首先进行预处理操作,告诉编译器如何预处理的代码被称为预处理指令,常见的有头文件的包含,宏定
-
2023-02-13 21:46:29
动态:小楼昨夜又东风什么意思<
小楼昨夜又东风什么意思,小楼昨夜又东风的意思是:昨夜小楼上又吹来了春风。原文:李煜《虞美人》虞美人·李煜春花秋月何时了,往事知多少...
-
2023-02-13 20:45:13
钒钛股份:2月13日接受机构调研,光大证券、广发基金参与|世界快看点<
2023年2月13日钒钛股份(000629)发布公告称公司于2023年2月13日接受机构调研,光大证券方驭涛任萌、广发基金陈少平顾益辉李耀柱段涛徐明德陈书
-
2023-02-13 18:34:02
如何使用 PVC 自己钻井<
你需要的东西铲子或后孔挖掘机五个5英尺长6英寸直径的PVC管小圆锯一根10英尺长、直径为3 4英寸的
-
2023-02-13 16:48:01
热门:网贷是什么东西_网贷是什么<
1、要考虑自己花钱是否合理?应急这些是没问题,但是可有可无的大可不必被负债务。2、确保自己有还款的能力,能及时归还,而不
-
2023-02-13 23:15:35
详解源文件编译链接至可执行程序的每一步-世界今头条
预处理,又叫预编译,源文件在进入编译器后要首先进行预处理操作,告诉编译器如何预处理的代码被称为预处理指令,常见的有头文件的包含,宏定
-
2023-02-13 21:46:29
动态:小楼昨夜又东风什么意思
小楼昨夜又东风什么意思,小楼昨夜又东风的意思是:昨夜小楼上又吹来了春风。原文:李煜《虞美人》虞美人·李煜春花秋月何时了,往事知多少...
-
2023-02-13 20:45:13
钒钛股份:2月13日接受机构调研,光大证券、广发基金参与|世界快看点
2023年2月13日钒钛股份(000629)发布公告称公司于2023年2月13日接受机构调研,光大证券方驭涛任萌、广发基金陈少平顾益辉李耀柱段涛徐明德陈书
-
2023-02-13 18:34:02
如何使用 PVC 自己钻井
你需要的东西铲子或后孔挖掘机五个5英尺长6英寸直径的PVC管小圆锯一根10英尺长、直径为3 4英寸的
-
2023-02-13 16:48:01
热门:网贷是什么东西_网贷是什么
1、要考虑自己花钱是否合理?应急这些是没问题,但是可有可无的大可不必被负债务。2、确保自己有还款的能力,能及时归还,而不
-
2023-02-13 14:50:55
江苏多措并举推动文旅市场加快全面复苏
江苏省近日发布《关于促进全省文旅市场加快全面复苏的具体政策举措》,进一步强化政策支持,丰富优质产品供给,加大消费引导促进力度,持续推
-
2023-02-13 12:55:17
天天视点!flash 8_关于flash 8的介绍
flash8,关于flash8的介绍很多人还不知道,现在让我们一起来看看吧!1、内容介绍本书精选了近年来较为流行的F
-
2023-02-13 10:55:49
天天速看:中南文化董秘回复:公司控股子公司江阴国联新能源有限公司的光伏项目正在正常推进中,公司密切关注相关进展
中南文化(002445)02月13日在投资者关系平台上答复了投资者关心的问题。
-
2023-02-13 09:33:27
创历史!达拉斯站决赛:吴易昺三盘击败伊斯内尔,夺巡回赛首冠_全球头条
创历史!达拉斯站决赛:吴易昺三盘击败伊斯内尔,夺巡回赛首冠,八强,吴易昺,达拉斯,网球赛事,网球运动员,约翰·伊斯内尔,奥林匹克运动会
-
2023-02-13 08:52:59
全球热文:胡同
《胡同》是由付宁执导,赵露思、蔡文静、关晓彤、侯明昊、刘欢、林一等主演的电视剧,讲述了祖孙三代女性从居委会的开创、发展到发扬,始终秉
-
2023-02-12 12:07:38
阳了应该怎么办-阳性感染者如何用药 02月12日10时甘肃武威疫情数据 全球即时
青壮年一般高烧阶段不超过3天,到第4、第5天会明显好转。如高烧持续3天以上,且没有缓解趋势,建议前往医院就诊。一、02月12日10时甘肃武威通
-
2023-02-12 09:09:55
世界快播:临沂:空中施肥
临沂:空中施肥
-
2023-02-12 05:40:52
苞叶组_关于苞叶组的简介
1、苞叶组隶属于菊科、菊属。本组有2种。主要分布在河南、陕西、内蒙古等地。蒙菊的花序有清热解毒的功效。本文关于苞叶
-
2023-02-12 00:58:16
娱记再锤迪丽热巴,放出孕期照,膀大腰圆形似怀孕
娱记再锤迪丽热巴,放出孕期照,膀大腰圆形似怀孕,卓伟,怀孕,张碧晨,华晨宇,娱乐圈,迪丽热巴
-
2023-02-11 21:08:13
淋巴细胞比率偏高是什么意思_淋巴细胞比率偏高说明什么问题 环球今头条
1、淋巴细胞是白细胞的一部分。对于正常成年人来说,淋巴细胞占白细胞总数的20%-40%。2、淋巴细胞比例高可能有两种情况
-
2023-02-11 17:56:05
棂窗的意思是什么_棂
1、棂(棂)língㄌㄧㄥˊ旧式房屋的窗格:窗~。2、长木。3、郑码:FXUO,U:68C2,GBK:E8F
-
2023-02-11 15:14:00
关注:个人简介的自我介绍_张启生的个人简介
1、安徽黄梅戏艺术职业学院表演系主任,全国戏曲红梅大赛金奖获得者。2、繁昌县人,先后毕业于安徽艺术职业学院,安庆师范学院
-
2023-02-11 11:47:34
公务员招录报名工作结束
本报讯(方文婷唐煌)记者2月9日从市人力资源考试院获悉,根据全省公务员招录工作安排,2023年公务员考试比往年提前,我市计划面向社会公开招
-
2023-02-11 08:47:50
中国管理咨询公司排名前100_中国管理咨询公司排名 焦点消息
1、1麦肯锡咨询公司2罗兰贝格咨询公司3IBM全球企业咨询服务部4科尔尼咨询公司5正略钧策咨询公司6AMT咨询7埃森哲咨
-
2023-02-11 05:55:25
【天天新要闻】孩子吃什么有助长高食谱_孩子吃什么有助长高
1、孩子身高的增长和很多因素有关,其中遗传的作用更大,但后天的营养、运动、睡眠都很重要。2、后天的营养要多吃富含钙和蛋白
-
2023-02-11 02:24:22
如何根治打呼噜?怎么治好打呼噜 焦点滚动
身边睡着个爱打呼噜的人,分分钟都是一种折磨。可是,打呼噜的人也很无耐,自己控制不了自己的呼噜,也很苦恼。那么,如何根治打呼噜?怎么治
-
2023-02-11 01:42:14
扬州八怪传奇故事 全球实时
1、扬州八怪传奇故事。2、第一批市级非物质文化遗产代表性项目名录民间文学类项目。本文到此分享完毕,希望对大家有所帮助
-
2023-02-10 22:59:18
华硕a45v笔记本是哪年的_华硕a45
1、华硕A45支持DirectX11。2、外观方面,华硕A45系列采用了鲜艳多彩的机身外壳,突破了以往笔记本沉闷单调的色彩风格。机身有四个明显的角和平
-
2023-02-10 22:20:06
以礼物吸引
以礼物吸引,为了鼓励孩子的心,也是他的一辈子。他是一个非常伟大的人,也许是我们的人生。他们对我们来说,他们都是非常的强烈
-
2023-02-10 20:14:22
扩展泵组、脚限位器是啥?一起了解出舱“黑科技”-新要闻
扩展泵组:热控系统的“心脏”在多次空间站出舱任务中,我们都经常听到一个词叫扩展泵组。在这次出舱任务中也不例外,航天员在梦天实验舱安...
-
2023-02-10 19:25:20
软文发布平台哪个好_今日报
软文发布平台怎么选?怎样才能尽量少走弯路?经常看到很多朋友说,自己不知道怎么选择软文发布平台,网络上各种各样的新闻门户网站、自媒体平
-
2023-02-10 18:05:21
当前短讯!【防弹少年团 Bts /闵玧其】跀茪(月光)chapter3(高中时的爱恋)
各位ARMY宝子们,文章纯属娱乐,勿上真人!高中生闵糖x高中生阿米!!因为方胖子的恶心行为,女主改名金阿米啦,和我们国王一个姓(*^▽^*)那天
-
2023-02-10 16:09:02
最新消息:广州买小礼物
广州买小礼物,如果是送给女朋友,那么自己亲手做一个礼物,也是很浪漫的选择。可能我们中国风俗,我们一直在广州最美,有一家三
-
2023-02-10 15:42:35
海南十大机场名单 海南有几个飞机场
小编为您整理了海南十大机场名单,它们是三亚凤凰国际机场(4E、干线机场)、渚碧岛机场(大型优良机场)、海口美兰国际机场(4F、中国重要干线机场
-
2023-02-10 15:00:11
31省区市敲定GDP目标 各地如何拼经济、稳增长?
2023年是全面贯彻党的二十大精神的开局之年,也是努力实现经济运行整体好转的关键一年。各地经济增速目标定了多少?拼经济、稳增长有哪些新动