【发布时间】:2014-06-03 19:33:51
【问题描述】:
我有一个在 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 的长度限制吗?
【问题讨论】:
-
请看我在帖子中的第一条评论,它已经被称为。
标签: java linux unsatisfiedlinkerror