链接

链接:是将各种代码和数据片段收集并组合成一个单一文件的过程,这个文件可以被加载到内存并执行。链接可以执行于编译时,加载时或是运行时。

静态链接:
静态链接是像Linux LD程序这样的静态链接器以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的、可以加载和运行的可执行目标文件作为输出。

链接器如何解析多重定义的全局符号:
在编译时,编译器向汇编器输出每个全局符号,或者是强,或者是弱,而汇编器把这个信息隐含地编码在可重定位目标文件的符号表里。函数和已初始化的全局变量是强符号,未初始化的全局变量是弱符号。
规则1:不允许有多个同名的强符号
规则2:如果有一个强符号和多个弱符号同名,那么选择强符号
规则3:如果有多个弱符号同名,那么从这些弱符号中任意选择一个

与静态库链接:
所有的编译系统都提供一种机制,将所有相关的目标模块打包成为一个的单独的文件,称为静态库,它可以用作链接器的输入。当连接器构造一个输出的可执行文件时,它只是复制静态库里被应用程序引用的目标模块

posted @ 2018-12-09 21:41  Arthur_08320  阅读(190)  评论(0编辑  收藏  举报