У меня есть библиотека, созданная для Linux, и ее можно найти здесь:
/test/lib/liblzo.so
Затем у меня есть следующий код Java:
импортировать org.junit.Test;
public class CompressionTest {
@Test
public void testCompression() throws Exception {
System.out.println("java.library.path=" + System.getProperty("java.library.path"));
try {
System.loadLibrary("lzo");
} catch (Exception e) {
e.printStackTrace();
}
}
}
Выполнение этого приводит к следующему исключению:
CompressionTest > testCompression FAILED
java.lang.UnsatisfiedLinkError: no lzo in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at CompressionTest.testCompression(CompressionTest.java:11)
Тем не менее, я вижу из стандарта из теста, что путь к моей библиотеке находится на пути к библиотеке:
java.library.path=/test/lib
Я сократил код до простейшей настройки и до сих пор не могу понять, почему библиотека не загружается. Может ли кто-нибудь посоветовать, что может пойти не так, и как я могу отладить проблему?
Обновить
Вчера я много играл с этим, как уже упоминалось, я очистил все java.library.path
для этого поста, но заметил, что он был довольно длинным. Длинный по общей длине, но и то, что каждый каталог на нем был достаточно вложенным (возможны 8/9 уровней). Я сократил путь, включив в него только известный мне каталог, где находится библиотека so
, и это сработало.
Кто-нибудь вообще знает о каких-либо ограничениях длины java.library.path
?