【问题标题】:Running a mix of 32 and 64 bit native libraries in a Java application在 Java 应用程序中混合运行 32 位和 64 位本机库
【发布时间】:2016-03-12 02:52:49
【问题描述】:

我们正在为 Linux 开发一个桌面 Java 应用程序,该应用程序使用本地 .so 库访问一系列外围设备(USB 和串行端口预外围设备)。一些供应商仅提供 32 位库,而另一些供应商仅提供 64 位版本。由于我们需要所有外围设备在我们的应用程序中运行,我们必须找到一种方法来运行这两种架构。

我们正在使用 JNA 连接到 Linux 文件系统中的本机库。当我们在 64 位 JRE 下运行我们的软件时尝试访问 32 位库时,我们会收到以下错误消息:

java.lang.UnsatisfiedLinkError: /usr/lib/jni/libsatprotocol.so: wrong ELF class: ELFCLASS32

有没有办法在一个 JRE 中运行这两种架构?我们可以将某些 32 位 JRE 库添加到我们的 64 位 JRE 中吗?以不同的方式访问本机库是否可行?

【问题讨论】:

  • 您应该在一个架构中编写一个最小服务,通过 REST 或基于套接字的 API 与另一个架构进行通信。您不能在同一个 JVM 中同时运行两者。

标签: java 32bit-64bit jna elf


【解决方案1】:

有没有办法在单个 JRE 中运行这两种架构?

没有。他们使用不同的数据模型。

https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models

【讨论】:

    【解决方案2】:

    如果您安装一个 64 位的 JRE,您可以运行两个 JVM,一个是 32 位的,一个是 64 位的。两者都在一个 JVM 中是不可能的。

    【讨论】:

      猜你喜欢
      • 2014-04-27
      • 2017-02-02
      • 2013-10-23
      • 1970-01-01
      • 2012-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      相关资源
      最近更新 更多