我有一个 A 进程,它使用两个共享库: libA.so 和 libB.so 。因为这两个图书馆是由不同的人写的。不幸的是, libA.so 使用第三方库 libD.so 的1.0版。而 libB.so 以静态形式 libD.a 使用库的2.0版本。我知道如果 libA.so 和 libA.so 使用 libD.so ,由于全局符号设置,可能会发生一些错误即可。但这种情况也有同样的问题吗?
我知道链接标志-Bsymbolic可用于 libA.so 或 libB.so ,以强制符号首先解析符号库。为了使进程 A 正确运行,两个库都必须与此标志链接,我是对的吗?但是,我没有 libA.so 的源代码。所以我无法再次重新链接 libA.so 。
更一般地说,如果一个进程使用两个第三方库,其中包含另一个相同的第三方库。会发生同样的事吗?有什么办法可以解决这个问题吗?
答案 0 :(得分:0)
这可能会或可能不会对你有所帮助,但鉴于缺乏信息,我希望它至少会引发一个想法,或者引导你做类似的事情。
这是一个允许您基于每个目录更改shell设置的应用程序: https://github.com/zimbatm/direnv
听起来你实际上有一个问题需要你从源代码重新编译你的一个库。这并不理想,但如果没有使用兼容的第三方版本的构建,您可能会寻找一个完全不同的库来完成原始任务。