通过JNI从Java加载2 .so中的本机库

时间:2011-12-21 10:12:43

标签: java linux java-native-interface java.library.path

我在加载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运行时链接的工作方式有关吗?

我看到很多方法可以解决它,但首先要了解它的底线。

谢谢, 米哈伊尔

0 个答案:

没有答案