线程“main”中的异常 java.lang.UnsatisfiedLinkError - 无法加载库 - 无法获取 InputStream

时间:2021-07-03 09:43:30

标签: java linux

我正在尝试在 linux Jeigen 中安装 Java 包,但在使用测试安装时遇到错误

java -cp build/linux-64/Jeigen-linux-64.jar:build/linux-64/jna-4.1.0.jar jeigen.TestSimple

错误:

 Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'jeigen-linux-64': Can't obtain InputStream for linux-x86-64/libjeigen-linux-64.so
            at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
            at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
            at com.sun.jna.Native.register(Native.java:1396)
            at com.sun.jna.Native.register(Native.java:1156)
            at jeigen.JeigenJna$Jeigen.<clinit>(JeigenJna.java:64)
            at jeigen.DenseMatrix.mmul(DenseMatrix.java:1049)
            at jeigen.TestSimple.main(TestSimple.java:14)

我获得了两个 jar 文件,Jeigen-linux-64.jar 和 jna-4.1.0.jar(我已经导出到我的类路径),并且 libjeigen-linux-64.so 库是在我家中构建的路径/home/.jeigen/native/libjeigen-linux-64.so

对正在发生的事情有什么想法吗?

1 个答案:

答案 0 :(得分:0)

Here is the source for NativeLibrary - 行号与您的堆栈跟踪不太一致,因此这不是您拥有的版本的来源,但足够接近。如您所见,它在很多很多地方进行查找,并通过 java.util.logging 进行记录,因此您可以使用以下内容:

把它放在一个文件中:

# Logging
handlers = java.util.logging.ConsoleHandler
# Console Logging
java.util.logging.ConsoleHandler.level = ALL
java.util.logging.ConsoleHandler.formatter =  java.util.logging.SimpleFormatter 
java.util.logging.SimpleFormatter.format = %1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s %2$s %5$s%6$s%n

使用 java -Djava.util.logging.config.file=/path/to/thatfile 启动 java。

那会有很大帮助。

答案可能是您需要使用 -Djna.library.path=/path/where/your/solibfileis 进行 futz 或将您的 solib 文件移动到更好的位置 - 通过让 JNA 记录它正在尝试做什么,您需要放置这些东西的路径以及如何指定查看位置的选项将变得清晰。