gpt4 book ai didi

Linux 上的 java.lang.UnsatisfiedLinkError

转载 作者:太空宇宙 更新时间:2023-11-04 03:58:03 25 4
gpt4 key购买 nike

我有一个在 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 长度限制吗?

最佳答案

您正在使用相对库路径,我怀疑您会发现您的测试框架正在从不同的目录执行您的文件。通过检查您当前的工作目录来确认这一点:

System.out.println("user.dir=" + System.getProperty("user.dir")); 

要解决这个问题,我建议您将 java.library.path 设置为绝对路径,这样这些事情就无关紧要了。

关于Linux 上的 java.lang.UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24023480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com