我已经编译了一个 Java 应用程序 (JAR),它可以在我的 Mac OS 计算机上正常运行。它使用 JNI 调用已编译的 C 共享库并使用 jnr-ffi加载 native 代码。
我收到一堆由 jnr-ffi 尝试初始化引起的错误。看起来应该有一些 jni 文件作为 Java 安装的一部分存在于系统上,但它们不存在。
我无法逐字复制堆栈跟踪,但以下是一些应该有帮助的错误:
Exception in thread "main" j.l.UnsatisfiedLinkError: could not load FFI provider jnr.ffi.provider.jffi.provider
Another unsatisfied link error below: /tmp/...gibberish..so cannot open shared object file: no such file or directory.
Another unsatisfied link error: Can't load library: /usr/lib/libjffi-1.2so
基本上是一堆与加载 native 代码相关的错误。
我已经提取了我尝试运行的 JAR,它包含一堆文件夹,例如 arm-Linux
、Darwin
、i386-Linux
和文件 libjffi-1.2.so
所以看起来这些文件存在于 JAR 中,但在运行时,jave 无法找到它们。
我不知道如何解决这个问题,但它在我的另一台机器上有效。如何修复?
我尝试使用 sudo
运行。
最佳答案
当您运行 JVM 时,它将查找 native 库并尝试加载它。不幸的是, native 库在编译时不可移植,这就是为什么您尝试运行的软件提供为不同体系结构编译的相同库的原因。
您需要的树莓派是 arm-Linux
。
您只需弄清楚 JVM 用于加载库的路径是什么,然后通过命令行配置软件以加载正确的路径,或者将您在 mac 中使用的路径替换为编译的路径ARM。
关于java - 无法在Raspberry Pi上加载JNI相关应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36429382/