我将以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.dll
中的一个重命名为shared_other.dll
并以某种方式“重新链接” {{ 1}}和second.dll
。还有其他解决冲突的方法吗?
PS shared_other.dll
是MATLAB,app.exe
是Python解释器库,而second.dll
是HDF5库的不同版本-一个是MATLAB使用的,另一个是使用的通过Keras预编译轮。