linux - 当两个共享库使用同一个 3rd 方库的不同版本时该怎么办?

标签 linux shared-libraries

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

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

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

最佳答案

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

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

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

关于linux - 当两个共享库使用同一个 3rd 方库的不同版本时该怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18008716/

相关文章:

linux - 删除以非数字数据开头的行并在 linux 中的特定文本格式之前插入文本

php - 如何在我的 Linux 服务器上创建 PDF 文件的缩略图/屏幕截图?

共享文件夹中的 Linux 应用程序文件路径位置 [Java 应用程序]

c - 解释force_align_arg_pointer函数属性

android - native 库可以作为依赖项包含在 Android Studio 项目中吗?

c++ - Ubuntu 10.04 需要什么包才能运行用 gcc/g++ 4.7 编译的程序?

c - "trace_module_put/trace_module_get"实现了什么?

c - 当 `GC.enable(true)` 时,在 Julia 中使用 ccall 时出现段错误

c - 与没有版本的共享库链接

linux - 静态库 (.a) 和共享库 (.so) 之间的文件格式差异?