是否可以将二进制文件重新链接到其他兼容的共享库,或者加载两个具有相同名称的库

时间:2018-08-12 22:42:46

标签: c++ windows dll

我将以Windows为例,但我想听听是否有解决Linux中类似问题的方法。

我有一个与两个库(app.exeshared.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.dll中的一个重命名为shared_other.dll并以某种方式“重新链接” {{ 1}}和second.dll。还有其他解决冲突的方法吗?

PS shared_other.dll是MATLAB,app.exe是Python解释器库,而second.dll是HDF5库的不同版本-一个是MATLAB使用的,另一个是使用的通过Keras预编译轮。

0 个答案:

没有答案