java - 无法在Raspberry Pi上加载JNI相关应用程序

标签 java

我已经编译了一个 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-LinuxDarwini386-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/

相关文章:

java - 尝试检索 BusinessPartnerUUID 时出错

java - Spring 批处理 : stop writer when reader return null

java - Fest swing gui框架,奇怪的输出

java - RingtoneManager 返回空铃声

java - 在 Java 中打印数学符号给出错误的输出

java - 创建的类和公共(public)方法未转到测试方法

java - getResourceAsStream 返回空指针异常(spring 4)

java - 用逗号将整数转换为字符串数千

java - 如何批量更新我的 mongo 数据以添加固定级别?

java - 本地开发环境和云之间的 Google App Engine 行为有何不同?