【问题标题】:What to do when two shared libraries which uses different versions of the same 3rd party library?当两个共享库使用同一个 3rd 方库的不同版本时该怎么办?
【发布时间】:2013-08-02 04:19:08
【问题描述】:

我有一个进程 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

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

【问题讨论】:

  • 可能没有通用的解决方案。你应该准确解释libAlibBlibD 到底是什么。也许您可以特别为他们找到解决方法。
  • 太糟糕了,libB 是使用 vnl(libD) 的 ITK。 libA 也是使用 vnl 的非公共库。 @BasileStarynkevitch

标签: linux shared-libraries


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    相关资源
    最近更新 更多