【发布时间】:2013-08-02 04:19:08
【问题描述】:
我有一个进程 A,它使用两个共享库:libA.so 和 libB.so。因为这两个库是由不同的人编写的。不幸的是,libA.so 使用 3rd 方库 libD.so 的 1.0 版。而 libB.so 以静态形式 libD.a 使用 2.0 版库。我知道如果 libA.so 和 libA.so 使用 libD.so,可能会因为 Global Symbol Interpose 而出现一些错误。但是这种情况是不是也有同样的问题呢?
我知道可以在 libA.so 或 libB.so 上使用链接标志 -Bsymbolic 来强制符号首先使用库解析符号。为了使进程 A 正确运行,这两个库都必须与此标志链接,对吗?但是,我没有libA.so 的源代码。所以我不能再次重新链接 libA.so 。
更一般地说,如果一个进程使用两个第 3 方库,其中包含另一个相同的第 3 方库。会不会发生同样的事情?我能做些什么来解决这个问题吗?
【问题讨论】:
-
可能没有通用的解决方案。你应该准确解释
libA、libB、libD到底是什么。也许您可以特别为他们找到解决方法。 -
太糟糕了,libB 是使用 vnl(libD) 的 ITK。 libA 也是使用 vnl 的非公共库。 @BasileStarynkevitch