首页 > 解决方案 > 是否可以使用不同的兼容共享库重新链接二进制文件或加载两个同名的库

问题描述

我将以 windows 为例,但我很想知道是否有解决 linux 中类似问题的解决方案。

我有一个app.exe与两个库(shared.dll和)链接的应用程序(称为second.dll)。该库second.dll恰好链接到第三个库(也称为shared.dll),该库恰好与与 链接的库具有相同的名称app.exe,但不是二进制兼容版本。实际上,它们是同一个软件库的两个不兼容版本。

所以依赖图是:

         app.exe
        /       \
  shared.dll  second.dll 
     (v1)         \
                shared.dll
                   (v2)

app.exe首先加载shared.dll,然后second.dll再尝试加载名为shared.dll. Windows 现在认为这个库已经加载,但是second.dll找不到它所依赖的入口点并且会失败。

假设我无权访问任何源代码,我可以将其中一个shared.dlls 重命名为shared_other.dll并以某种方式“重新链接”second.dllshared_other.dll. 有没有其他方法可以解决冲突?

PSapp.exe是 MATLAB,second.dll是 Python Interpreter 库,shared.dlls 是 HDF5 库的不同版本——一个是 MATLAB 使用的,另一个是 Keras 预编译轮使用的。

标签: c++windowsdll

解决方案


推荐阅读