Linux学习笔记:动态加载共享对象与链接库的过程
发布时间
阅读量:
阅读量
在以往的项目开发过程中,曾出现过一个具体问题:当模块中所使用的某个so文件与模块中的某源码文件存在同名函数(从链接器的角度来看,属于同名符号)时,so文件中的该函数会被“覆盖”,从而引发模块启动时崩溃的情况。当时曾专门进行过实验,并总结出一些避免问题的小技巧(如参见之前的某篇笔记),但对导致问题的根本原因并不十分清楚(由于当时对相关术语及其英文关键词缺乏了解,难以通过搜索引擎获取有效信息)。最近,在阅读《程序员的自我修养:链接、装载与库》一书后,才理解了此类问题背后的原理。作为学习笔记,特此记录下来。
1)共享对象
关于动态共享对象的基本介绍(例如其基本概念、优缺点及使用方法等),网上已有大量经典资料可供参考,例如wikipedia在说明library topic时介绍的,此处不再详细展开。
2)基本思想
Linux系统中实现动态链接的核心理念是:将程序拆分为多个相对独立的模块,并在程序运行前的装载阶段(而非编译阶段)将这些模块连接起来形成完整的程序。这与静态链接方式不同,后者是在编译时就将所有模块整合为一个可执行文件。
3)装载过程及涉及的问题
当程序被装载时,系统的动态链接器会加载程序所需的所有动态链接库(如基础的l
全部评论 (0)
还没有任何评论哟~
