函数库、链接、载入
编译器创建一个包含可重定位对象的输出文件,可重定位的对象就是与源程序对应的数据和机器指令
绝大多数编译器都是由多达六七个稍小的程序组成的,这些程序由“编译器驱动器”的控制程序来调用,这些稍小的可以很方便的从编译器中分离出来的单独程序包括:预处理器、语法和语义检查器、代码生成器、汇编程序、优化器、链接器,当然还包括一个调用所有这些程序并向各个程序传递正确选项的驱动器程序,优化器几乎可以加在上述所有阶段的后面
可以通过给编译器驱动器一个特殊的“-W”选项向各个阶段传递选项信息,“W”后紧跟一个阶段字符提示哪个阶段,一个“,”,然后就是具体的选项,所以如果要从编译器驱动器向链接器传递任何选项,必须在具体的选项前面加上“-W1”前缀
cc -W1, -m main.c > main.linker.map
将“-m”选项传递给链接-载入器,要求它产生链接器映像
目标文件并不能直接执行,首先需要载入到链接器中,链接器确认main函数为初始进入点,把符号引用绑定到内存地址,把所有的目标文件集中在一起,在加上库文件,从而产生可执行文件
静态链接:函数库的一份拷贝是可执行文件的物理组成部分
动态链接:可执行文件只是包含了文件名,载入器在运行时寻找程序所需的函数库
收集模块准备执行的三个阶段的规范名称:链接-编辑、载入、运行时链接。
静态链接的模块被链接编辑并载入以便运行
动态链接的模块被链接编辑后载入&#