程序员的自我修养第七章读书笔记-动态链接2
2018-01-02 11:27
225 查看
显式运行时链接
支持动态链接的系统都支持一种更加灵活的模块加载方式,叫做显示运行时链接(Explicit Run-time Linking),有时也叫运行时加载。也就是让程序自己在运行时控制加载指定的模块,并且可以在不需要该模块时将其卸载。一般的共享对象不需要进行任何修改就可以进行运行时装载,这种共享对象往往被叫做动态装载库(Dynamic Loading Library),其实本质上它跟一般的共享对象没什么区别,只是程序开发者使用它的角度不同。在Linux 中,从文件本身的格式上来看,动态库实际上跟一般的共享对象没有区别。主要的区别是共享对象是由动态链接器在程序启动之前负责装载和链接的,这一系列步骤都由动态链接器在程序启动之前负责装载和链接的,这一系列步骤都由动态链接器自动完成,对于程序本身是透明的;而动态库的装载是通过一系列由动态链接库提供的API,具体的讲有4个函数:打开动态库(dlopen)、查找符号(dlsym)、错误处理(dlerror)以及关闭动态库(dlclose),程序可以通过这几个API对动态库进行操作。这几个API的实现是在/lib/libdl.so.2里面,他们的声明和相关常量被定义在系统标准库文件
1.dlopen()
打开一个动态库,并将其加载到进程的地址空间,以完成初始化过程。2.dlsym()
dlsym函数基本上是运行时装载的核心部分,我们可以通过这个函数找到所需要的符号。3.dlerror()
每次我们调用dlopen()、dlsym()或者dlclose()以后,我们都可以通过dlerror()函数来判断上一次调用是否成功。dlerror()的返回值类型是char *,如果返回NULL,则表示上一次调用成功;如果不是,则返回相应的错误消息。4.dlclose()
dlclose()的作用跟dlopen()刚好相反,它的作用的是将一个已经加载的模块卸载。第七章小结
装载时重定位和地址无关代码是解决绝对地址引用问题的两个方法,装载时重定位的缺点是无法共享代码,但是他的运行速度较快;而地址无关代码的缺点是运行速度较慢,但它可以实现代码段在各个进程之间的共享。相关文章推荐
- 《深入理解计算机系统》第七章 链接 读书笔记
- 《程序员的自我修养-链接加载与库》读书笔记(2)---程序环境-内存
- 《程序员的自我修养》读书笔记2 -- ELF目标文件和静态链接和装载
- 《读书笔记》程序员的自我修养之编译和链接
- 《深入理解计算机系统》读书笔记——第七章 链接
- [Mo]程序员的自我修养-链接、装载与库读书笔记【1】-gcc编译、链接
- 《深入理解计算机系统》读书笔记 第七章 链接
- 【程序员的自我修养】第9章 Windows下的动态链接
- 《深入理解计算机系统》读书笔记第七章——链接
- 推荐:《程序员的自我修养——链接、装载与库》 读书笔记
- 程序员的自我修养 链接、装载、与库——读书笔记
- 《程序员的自我修养》阅读笔记(二):装载与动态链接
- 《深入理解计算机系统》读书笔记:第七章 链接
- 《程序员的自我修养——链接、装在与库》第三章《目标文件里有什么》读书笔记
- 【读书笔记】程序员的自我修养:链接、装载与库 第一章 温故而知新
- 【读书笔记】程序员的自我修养:链接、装载与库 第二章 编译与链接
- COM技术内幕读书笔记————动态链接和组件
- 《程序员的自我修养-链接加载与库》读书笔记(1)---基础知识储备
- 2013337朱荟潼 Linux&深入理解计算机系统第七章读书笔记——链接
- 《深入理解计算机系统》 第六周读书笔记 第七章 链接