静态连接器动态连接器

来源:互联网 发布:网络程序员 编辑:程序博客网 时间:2024/04/30 02:42

1 链接器:
连接器读取可重定位对象文件的集合,然后链接它们,输出在一个可执行文件中。英文:The linker reads a collection of relocatable object files and links them together into an output executable file.

2 链接器中的符号,包括三种,分别为:
1)定义的全局变量
2)引用的全局变量
3)类内全局变量

3 由.o文件链接为可执行文件,要有一个符号解析(Symbol resolution) 的过程。

4 静态链接器:
静态链接器中包含新定义的a.c文件二进制信息,即a.o文件,还包括a.c文件引用的其他文件,假如引用了printf函数,则还包括printf.o文件等信息。如果此应用程序的另一个文件也需要这个printf函数,则也需要加载到这个Linker中。因此静态链接,耗内存多;生成的Linker文件大。

动态链接器:
动态链接器中包含新定义的a.c文件二进制信息,即a.o文件,但是不是包括prinft.o文件,而是仅仅包括它的重定位信息和符号表信息。在程序加载后,根据重定位信息,确定printf.o在内存中的最终地址,当运行到这个a.c文件时,才根据这个地址和符号表信息去加载对应的二进制数据到内存;如果另外一个线程也需要这个printf.o文件,则直接从这个内存地址中读取,实现资源共享。因此动态链接库,又称为动态共享库。因此动态链接库耗内存小。

0 0