运行 Java 应用程序中 32 位和 64 位本机库的混合

Running a mix of 32 and 64 bit native libraries in a Java application

我们正在为 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 吗?以不同的方式访问本机库是否可行?

Is there any way of running both architectures in a single JRE?

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

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

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