C语言之链接知识

函数库、链接、载入

编译器创建一个包含可重定位对象的输出文件,可重定位的对象就是与源程序对应的数据和机器指令

绝大多数编译器都是由多达六七个稍小的程序组成的,这些程序由“编译器驱动器”的控制程序来调用,这些稍小的可以很方便的从编译器中分离出来的单独程序包括:预处理器、语法和语义检查器、代码生成器、汇编程序、优化器、链接器,当然还包括一个调用所有这些程序并向各个程序传递正确选项的驱动器程序,优化器几乎可以加在上述所有阶段的后面
在这里插入图片描述
可以通过给编译器驱动器一个特殊的“-W”选项向各个阶段传递选项信息,“W”后紧跟一个阶段字符提示哪个阶段,一个“,”,然后就是具体的选项,所以如果要从编译器驱动器向链接器传递任何选项,必须在具体的选项前面加上“-W1”前缀

cc -W1, -m main.c > main.linker.map

将“-m”选项传递给链接-载入器,要求它产生链接器映像

目标文件并不能直接执行,首先需要载入到链接器中,链接器确认main函数为初始进入点,把符号引用绑定到内存地址,把所有的目标文件集中在一起,在加上库文件,从而产生可执行文件

静态链接:函数库的一份拷贝是可执行文件的物理组成部分
动态链接:可执行文件只是包含了文件名,载入器在运行时寻找程序所需的函数库

收集模块准备执行的三个阶段的规范名称:链接-编辑、载入、运行时链接。
静态链接的模块被链接编辑并载入以便运行
动态链接的模块被链接编辑后载入&#

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七云享

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值