当前播报:详解源文件编译链接至可执行程序的每一步

2023-02-14 05:11:16 来源: 腾讯云

前言

本文利用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 合并段表

在源文件经过编译过程后文件后缀变为oobj后,其内部的代码已经变成二进制。

此时,文件会将内部的二进制代码按类型划分成许多部分,每一部分就被称为一段。

如图:

前文我们说到,多个目标文件经过链接器后整合为一个独立而完整的文件,因此链接中合并段表的意思就是把多个目标文件中对应的段,合并在一个目标文件内

II 符号表的合并

顾名思义,将每个目标文件中的符号表合并成一个目标文件的符号表。

III 符号表的重定位

如果在写代码时发生函数定、声明、使用等不在同一源文件等情况,那么多个目标文件的符号表中可能都会有相同的函数名及无效的地址,像这样:

如上图,在两个文件中都有add的存在,那么,在head.obj源.obj的符号表中都会有收录add。

但因源.c中没有对add进行实现,因此在汇总源.c的符号表时,其地址会被填入一个无效的地址

在链接过程中,链接器不仅会对符号表合并,也会将多余的符号删除,同时将每个符号的地址都定位为所有地址中有效的那一个

IIII 找不到符号报错

如果在写代码时不小心将函数名写错了,像这样:

那么由于在head.h汇总符号表时找不到代码实现,就会把Add的地址赋为一个无效的地址,像这样:

Add

0X00000000

add

0X0012FF40

但是,在符号表的重定位时,也没有重定位Add的有效地址,那么链接就无法完成,就会报出典型的错误:

PS:函数声明extern的作用就是告诉编译器,遇到无法解释的符号先别急着报错,后面会有定义的。

四、全文总结

多个源文件经过预处理(头文件包含、宏定义替换、注释的删除),编译(语法分析、词法分析、词义分析、符号汇总),汇编(二进制指令翻译、形成符号表)后成为一个目标文件。

多个目标文件在链接库的帮助下完成合并段表,符号表合并,符号表重定位后整合为一个目标文件。

到最后变成一个可执行的exe文件。

感谢您的阅读与耐心~

标签: 汇编语言 编程算法

无锡10个项目入选 江苏艺术基金2023年度资助项目立项名单公布

14日,江苏艺术基金2023年度资助项目立项名单结束公示,无锡共有民族舞

06-15 09:32:55

沃野万顷绘五彩画卷!全面推进乡村振兴,济南风景正好-每日热讯

06-15 09:00:27

财政部、工业和信息化部:打造一批数字化转型“小灯塔”企业

财政部、工业和信息化部近日联合印发《关于开展中小企业数字化转型城市

06-15 08:22:19

“两高一部”就依法惩治网暴征求意见 针对未成年人、组织“水军”实施网暴从重处罚 全球快消息

《征求意见稿》指出,人民法院、人民检察院、公安机关要充分认识网络暴

06-15 07:46:08

快看点丨芝加哥小麦期货周三跌超0.9%,原糖期货涨2.5%

周三(6月14日)纽约尾盘,彭博谷物分类指数跌0 36%,报44 5915点,美股

06-15 06:42:18

惊喜连连!下月利州东路将变身“紫薇大道”

眼下,广元市城区利州东路景观改造工程示范路段已接近尾声,颜值颇高的

06-15 05:34:03

天天时讯:请收藏!武汉武昌区安装220台AED,点位在这些地方

当发现身边有人突然倒地,出现意识丧失等突发情况时,作为普通人的你我

06-15 03:20:49

ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇 你选谁赢? 世界微头条

ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇你选谁赢?,espn,哥约

06-15 01:11:57

速讯:鲁迅经典大全集_关于鲁迅经典大全集简述

小伙伴们,你们好,今天小夏来聊聊一篇关于鲁迅经典大全集,关于鲁迅经

06-14 22:38:49

最新资讯:隐藏身份证号码中间几位公式函数_隐藏身份证号码中间几位公式

1、利用函数公式=SUBSTITUTE(A1,MID(A1,7,8), "******** ")。本文到此

06-14 21:39:25

环球观焦点:视频 | 国家发展改革委:持续优化营商环境 完善“1+N+X”法规政策体系

6月14日,国新办举行政策例行吹风会,介绍深化营商环境重点领域改革有

06-14 20:54:32

横空出世观后感200字20篇 横空出世观后感|世界快资讯

今天来聊聊空出世观后感200字20篇,横空出世观后感的文章,现在就为大

06-14 20:01:26

【维•新闻】奥地利银行服务费也将上涨! 全球微动态

由于通货膨胀上升,银行现在也在提高往来账户、ATM卡和其他服务的各种

06-14 19:32:06

老百姓:控股股东医药集团所持有部分股份被质押

2023年6月14日,老百姓(603883 SH)发布关于控股股东股份质押的公告。公

06-14 19:00:29

世界要闻:深圳多区学位爆仓、有学校要提前12年买房!家长直呼:入学太难了!

“我家小孩可能要被分流到其他学校了。”最近,朋友告诉我们,他们三年

06-14 18:16:52

青海省药品监管局召开医疗器械抽检工作推进会-精选

青海新闻网·大美青海客户端(记者李娜报道)近日,青海省药品监督管理

06-14 17:58:20

全球快讯:大宗交易:会稽山成交1578万元,折价1.50%(06-14)

2023年6月14日,会稽山发生1笔大宗交易,总成交120万股,成交金额1578

06-14 17:15:33

千万工程 一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展 每日热门

千万工程一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展---“

06-14 16:43:28

环球快报:口袋妖怪白金伊布进化什么好(口袋妖怪白金伊布)

1、获得全国图鉴后,与屋主羡慕先生对话,他会提及一只稀有的怪兽,之

06-14 16:14:02

全球时讯:贝壳找房是什么中介_贝壳找房是什么

“贝壳找房”是一款手机app,平台包含二手房、新房、租赁、家装等内容

06-14 15:57:29

三川智慧收关注函 被追问收购集盛科技8%股权估值的合理性和定价公允性 是否向关联方利益输送

三川智慧6月14日收深交所关注函,6月6日,公司披露公告称拟以6240万元

06-14 15:01:39

今日热讯:港股内房股持续走低 合景泰富集团跌超6%

截至发稿,合景泰富集团跌6 67%,报0 98港元。

06-14 14:43:13

全球最新:“低碳减肥法”风靡全网 碳水化合物真是变胖主因吗

从生酮饮食,到“断碳”“碳循环”,再到最近爆火的“某明星减肥法”…

06-14 14:01:24

天天速讯:莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况

莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况,国投集团,

06-14 13:02:48

天津市河东区一小区发生爆炸 造成3人死亡多人受伤|焦点资讯

中新网6月14日电据天津市公安局河东分局官方微信消息,天津市公安局河

06-14 12:29:40

第二届全国技能大赛福建省选拔赛开赛

为全国技能大赛推荐优秀选手,由省人社厅主办的第二届全国技能大赛(国

06-14 12:04:21

天天精选!汽车normal模式是什么(汽车normal在什么时候用?)

相信大家对汽车normal模式是什么,汽车normal在什么时候用?的问题都很

06-14 11:25:19

世界快资讯:易维哲:黄金继续维持在震荡中,原油关注EIA数据。

黄金上个交易日走出小幅的冲高回落日线报收一根带上影线的寸头阴线,隔

06-14 10:45:33

环球报道:邓州市工商联:组织企业参加“高校毕业生民营企业招聘周”双选会活动

为进一步助力民营经济高质量发展上办实事办好事,帮助民营企业吸纳更多

06-14 10:22:58

环球热议:大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免

大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免,哈喽,

06-14 10:12:01

世界最资讯丨5月份天津市CPI环比下降0.4%

5月份天津市CPI环比下降0 4%

06-14 09:38:22

家门口的“公益夜市”精彩开市!文明积分“兑”出居民幸福感

近日,南桥镇阳光社区“益路向阳,我与阳光有约”公益夜市精彩开市。现

06-14 08:58:17

世界最资讯丨把就业服务送到劳动者身边(民生观)

建在社区里的站点,让劳动者感受到实实在在的便利和越来越多的温暖  

06-14 08:33:53

【播资讯】柴祯祯:护眼产品怎样“叫得响”

柴祯祯:护眼产品怎样“叫得响”---近年来,电子产品快速普及、使用频

06-14 08:05:53

江苏盱眙:火红龙虾节 万人龙虾宴

江苏盱眙:火红龙虾节万人龙虾宴

06-14 07:04:00

蚂蚁的蚁组词_蚂蚁的蚁组词有哪些

欢迎观看本篇文章,小升来为大家解答以上问题。蚂蚁的蚁组词,蚂蚁的蚁

06-14 05:56:03

焦点速看:女的来月经能洗澡吗_来月经能洗澡吗

1、来月经时,阴道因经血洗涤而酸度下降,宫颈微开,机体免疫力下降。2

06-14 04:56:34

全球头条:老子一气化三清哪三清(老子一气化三清)

老子一气化三清哪三清,老子一气化三清这个很多人还不知道,现在让我们

06-14 03:02:16

速讯:长沙理工大学获批第二批国家级一流本科课程13门

新湖南客户端6月13日讯(通讯员刘文川)近日,教育部发布了《教育部关

06-14 01:05:16

感人!德约科维奇儿子坐在台下仰头望向爸爸,满满都是崇拜和自豪|焦点讯息

北京时间6月13日,在国内最大的网球论坛,有网友晒出塞尔维亚名将德约

06-13 22:31:58

天天快播:psp游戏迅雷链接(psp游戏迅雷下载)

来为大家解答以上问题。psp游戏迅雷链接,psp游戏迅雷下载这个很多人还

06-13 22:09:16

丰台区委书记王少峰:以“五气”连枝助推丰台倍增发展

6月13日下午,北京市政府新闻办召开“北京市贯彻落实党的二十大精神”

06-13 21:28:01

天天滚动:如何做五彩饭团_五彩饭团的做法

1、材料:米饭2碗、酱油1汤匙、糖1 2汤匙、鱼松3汤匙、火腿肠30g、黄瓜

06-13 20:52:20

决定的近义词是什么词_决定的近义词

1、1,首先要分清你说的“决定”是名词,还是动词;所以他的近义词有:

06-13 19:43:05

母猫嚎春一般几天结束

来为大家解答以上问题。母猫嚎春一般几天结束这个很多人还不清楚,现在

06-13 19:17:11

国内第四大运营商 中国广电终于支持携号转网:但只入不出

国内第四大运营商中国广电终于支持携号转网:但只入不出

06-13 18:40:47

天天视讯!已删的朋友圈如何恢复正常_已删的朋友圈如何恢复

你们好,最近小活发现有诸多的小伙伴们对于已删的朋友圈如何恢复正常,

06-13 18:12:39

环球微速讯:苏州双一流大学有几所 具体名单有哪些(1所)

苏州双一流大学只有有1所,即苏州大学。苏州双一流大学名单及建设学科

06-13 17:45:00

​你可以不识人,但千万要懂人性,10条人性潜规则,看懂现实_今日热文

在人际交往中,了解人性潜规则是非常重要的一点。只有了解这些规则

06-13 17:02:18

容声和海尔冰箱拆机对比_容声和海尔冰箱哪个好

1、这俩个品牌都同样是生产冰箱历史悠久的企业,也都是质量很过关的,容

06-13 16:36:59

沃野万顷绘五彩画卷!全面推进乡村振兴,济南风景正好-每日热讯
财政部、工业和信息化部:打造一批数字化转型“小灯塔”企业
“两高一部”就依法惩治网暴征求意见 针对未成年人、组织“水军”实施网暴从重处罚 全球快消息
快看点丨芝加哥小麦期货周三跌超0.9%,原糖期货涨2.5%
惊喜连连!下月利州东路将变身“紫薇大道”
天天时讯:请收藏!武汉武昌区安装220台AED,点位在这些地方
ESPN发问:库里杜兰特詹姆斯VS东契奇字母哥约基奇 你选谁赢? 世界微头条
速讯:鲁迅经典大全集_关于鲁迅经典大全集简述
最新资讯:隐藏身份证号码中间几位公式函数_隐藏身份证号码中间几位公式
环球观焦点:视频 | 国家发展改革委:持续优化营商环境 完善“1+N+X”法规政策体系
横空出世观后感200字20篇 横空出世观后感|世界快资讯
【维•新闻】奥地利银行服务费也将上涨! 全球微动态
老百姓:控股股东医药集团所持有部分股份被质押
世界要闻:深圳多区学位爆仓、有学校要提前12年买房!家长直呼:入学太难了!
青海省药品监管局召开医疗器械抽检工作推进会-精选
全球快讯:大宗交易:会稽山成交1578万元,折价1.50%(06-14)
千万工程 一线探访|浙江省绍兴市越城区安桥头村:文旅融合促发展 每日热门
环球快报:口袋妖怪白金伊布进化什么好(口袋妖怪白金伊布)
全球时讯:贝壳找房是什么中介_贝壳找房是什么
三川智慧收关注函 被追问收购集盛科技8%股权估值的合理性和定价公允性 是否向关联方利益输送
今日热讯:港股内房股持续走低 合景泰富集团跌超6%
全球最新:“低碳减肥法”风靡全网 碳水化合物真是变胖主因吗
天天速讯:莆田市国资委:莆田市国资国企2023年1-5月项目投资完成情况
天津市河东区一小区发生爆炸 造成3人死亡多人受伤|焦点资讯
第二届全国技能大赛福建省选拔赛开赛
天天精选!汽车normal模式是什么(汽车normal在什么时候用?)
世界快资讯:易维哲:黄金继续维持在震荡中,原油关注EIA数据。
环球报道:邓州市工商联:组织企业参加“高校毕业生民营企业招聘周”双选会活动
环球热议:大家都是皇帝陵墓,为何明皇陵墓完好无损,而清朝皇陵无一幸免
世界最资讯丨5月份天津市CPI环比下降0.4%
家门口的“公益夜市”精彩开市!文明积分“兑”出居民幸福感
世界最资讯丨把就业服务送到劳动者身边(民生观)
【播资讯】柴祯祯:护眼产品怎样“叫得响”
江苏盱眙:火红龙虾节 万人龙虾宴
蚂蚁的蚁组词_蚂蚁的蚁组词有哪些
焦点速看:女的来月经能洗澡吗_来月经能洗澡吗
全球头条:老子一气化三清哪三清(老子一气化三清)
速讯:长沙理工大学获批第二批国家级一流本科课程13门
感人!德约科维奇儿子坐在台下仰头望向爸爸,满满都是崇拜和自豪|焦点讯息
天天快播:psp游戏迅雷链接(psp游戏迅雷下载)
丰台区委书记王少峰:以“五气”连枝助推丰台倍增发展
天天滚动:如何做五彩饭团_五彩饭团的做法
决定的近义词是什么词_决定的近义词
母猫嚎春一般几天结束
国内第四大运营商 中国广电终于支持携号转网:但只入不出
天天视讯!已删的朋友圈如何恢复正常_已删的朋友圈如何恢复
环球微速讯:苏州双一流大学有几所 具体名单有哪些(1所)
​你可以不识人,但千万要懂人性,10条人性潜规则,看懂现实_今日热文
容声和海尔冰箱拆机对比_容声和海尔冰箱哪个好
【全球速看料】车多久做一次动平衡(多长时间做一次动平衡)
X 广告
行业动态
X 广告

Copyright ©  2015-2022 南极植物网版权所有  备案号:粤ICP备2022077823号-13   联系邮箱: 317 493 128@qq.com