我在加载2个库时遇到一些问题,其中一个库依赖于另一个库。假设我有2个libs,libA.so和libB.so,libB.so依赖于libA.so(从中调用函数)。
我需要通过JNI从Java加载libB.so并从中调用一些本机方法。
所以我要做的是:
static {
System.loadLibrary(A);
System.loadLibrary(B);
}
(两个库都驻留在java.library.path中)。
在Win32下,它运行正常 - B.dll看到A.dll已经加载,并且不会尝试自己加载它(使用PATH查找)。
在Linux上,它不起作用。附加日志显示,即System.loadLibrary(A);正确执行,并且libA.so被正确加载,然后,当我尝试加载B时,它在LD_LIBRARY_PATH中查找库libA.so,并且它失败(两个库都在java.library.path中,但不在LD_LIBRARY_PATH)。
有人为什么会这样?它与Linux运行时链接的工作方式有关吗?
我看到很多方法可以解决它,但首先要了解它的底线。
谢谢, 米哈伊尔