在大型应用程序中查找库冲突的最佳方法是什么?

在大型应用程序中查找库冲突的最佳方法是什么?

我有一个大型应用程序(我们称之为 P),有很多依赖项来 boost、Qt、zlib、libpng 等。最近,我向 P 添加了一个功能,需要动态加载新的共享对象(我们称之为lib1.so)。lib1.so依赖于 MATLAB api。因此,它将依赖于 P 已经依赖的许多库。

问题是,当我尝试在lib1.soP 内部动态加载(使用 Qt 5.12 的 QLibrary 类)时,加载失败。失败消息是找不到 Matlab 共享对象。但共享对象已经存在,并且其路径位于 LD_LIBRARY_PATH 内。

如果我尝试加载lib1.so一个简单的应用程序(具有相同的 LD_LIBRARY_PATH 值),它工作正常。

我的猜测是,P 在加载时加载共享对象,并lib1.so希望在动态加载时加载相同的库(但版本不同),并且这种冲突不允许lib1.so在 P 内加载。

我尝试过strace在P上使用命令,但是因为lib1.so是动态加载的,所以它对我没有多大帮助。

找到这个出现此错误的公共库的最佳方法是什么?

相关内容