我有一个大型应用程序(我们称之为 P),有很多依赖项来 boost、Qt、zlib、libpng 等。最近,我向 P 添加了一个功能,需要动态加载新的共享对象(我们称之为lib1.so
)。lib1.so
依赖于 MATLAB api。因此,它将依赖于 P 已经依赖的许多库。
问题是,当我尝试在lib1.so
P 内部动态加载(使用 Qt 5.12 的 QLibrary 类)时,加载失败。失败消息是找不到 Matlab 共享对象。但共享对象已经存在,并且其路径位于 LD_LIBRARY_PATH 内。
如果我尝试加载lib1.so
一个简单的应用程序(具有相同的 LD_LIBRARY_PATH 值),它工作正常。
我的猜测是,P 在加载时加载共享对象,并lib1.so
希望在动态加载时加载相同的库(但版本不同),并且这种冲突不允许lib1.so
在 P 内加载。
我尝试过strace
在P上使用命令,但是因为lib1.so
是动态加载的,所以它对我没有多大帮助。
找到这个出现此错误的公共库的最佳方法是什么?