【发布时间】:2012-12-05 06:57:03
【问题描述】:
我有一个包含四个共享库的可执行文件,并且依赖关系树如下所示:可执行文件app 执行foo.so 和bar.so 的dlopen。 foo.so 又链接到 fooHelper.so 和 bar.so 链接到 barHelper.so。
现在,问题是fooHelper.so 和barHelper.so 有一些相同的符号。例如,假设我们有一个func,在fooHelper.so 和barHelper.so 中有不同的实现。有没有办法强制foo.so 使用fooHelper.so 的实现和bar.so 使用barHelper.so 的?目前发生的情况是,根据帮助程序的链接顺序,func 的实现中只有一个被foo.so 和bar.so 使用。这是因为默认的 Unix 链接模型,如果符号的定义已经加载,那么随后加载的共享库中的任何其他定义都将被丢弃。基本上,func 将从首先链接的帮助程序库中获取。我需要一种方法来显式指定适当的映射,而无需更改共享库的源代码。
我正在使用 g++ 4.4 在 Linux 上工作。
【问题讨论】:
-
如果你从源代码编译那些库,你可以看看stackoverflow.com/questions/6538501/…
标签: linux shared-libraries dlopen