2

我有一个使用两个共享库的进程A : libA.solibB.so。因为这两个库是由不同的人编写的。不幸的是libA.so使用 3rd 方库libD.so的 1.0 版。而libB.so以静态形式libD.a使用库的 2.0 版。我知道如果libA.solibA.so使用libD.so,由于Global Symbol Interpose可能会发生一些错误。但是这种情况是不是也有同样的问题呢?

我知道可以在libA.solibB.so上使用链接标志 -Bsymbolic来强制符号首先使用库解析符号。为了使进程A正确运行,两个库都必须与此标志链接,对吗?但是,我没有libA.so的源代码。所以我不能再次重新链接libA.so。

更一般地说,如果一个进程使用两个 3rd 方库,其中包含另一个相同的 3rd 方库。会不会发生同样的事情?我能做些什么来解决这个问题吗?

4

1 回答 1

0

这可能对你有帮助,也可能对你没有帮助,但鉴于缺乏信息,我希望它至少能激发一个想法或引导你找到类似的东西。

这是一个允许您基于每个目录更改 shell 设置的应用程序: https ://github.com/zimbatm/direnv

听起来您实际上遇到了一个问题,需要您从源代码重新编译您的一个库。这并不理想,但如果没有使用兼容第三方版本的构建,您可能会寻求完全不同的库来完成原始任务。

于 2013-08-14T19:40:34.350 回答