在 Java 应用程序中混合运行 32 位和 64 位本机库
Posted
技术标签:
【中文标题】在 Java 应用程序中混合运行 32 位和 64 位本机库【英文标题】:Running a mix of 32 and 64 bit native libraries in a Java application 【发布时间】: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 中同时运行两者。 【参考方案1】:有没有办法在单个 JRE 中运行这两种架构?
没有。他们使用不同的数据模型。
见https://en.wikipedia.org/wiki/64-bit_computing#64-bit_data_models
【讨论】:
【参考方案2】:如果您安装一个 64 位的 JRE,您可以运行两个 JVM,一个是 32 位的,一个是 64 位的。两者都在一个 JVM 中是不可能的。
【讨论】:
以上是关于在 Java 应用程序中混合运行 32 位和 64 位本机库的主要内容,如果未能解决你的问题,请参考以下文章
ReactNative关于32位和64位SO库混合引入Crash解决方案
ReactNative关于32位和64位SO库混合引入Crash解决方案