情况: 有一个库
A
依赖于库 B
。然而,B
通常是由系统提供的,并且某些可能想要与A
链接的程序可能取决于系统提供的库。
A
依赖于 B
的特定版本,因此与其捆绑在一起,但由于 B
提供的兼容性保证,任何较新版本的 B
都应该可以正常工作。
问题:
假设有一种方法可以确定哪个是“较新”的,
A
是否可以动态选择它所链接的B
(系统提供的一个或捆绑的一个)?
请注意,理想情况下,它应该对
A
的“消费者”尽可能透明,即他们不应该尝试预加载 B
本身的适当版本并仅与 A
链接。另外 A
使用 B
中的符号来初始化它自己的全局变量。
即我想要有效实现的是动态链接器,当它加载库
A
并尝试满足其依赖关系时,选择较新的(捆绑B
|系统B
)(如果两者都存在)。
如果在程序启动时,环境 变量
LD_LIBRARY_PATH
被定义为包含冒号-
分隔的目录列表,然后搜索这些目录。
检查
dlopen
和 ldd
手册页。