2

我有一个.so在 ELF 格式下为 Linux 编译的库,Java 程序正在使用它。我正在尝试将此应用程序移植到 Mac OS X,并发现 OS X 对这些文件使用不同的扩展名,.jnilib. 我已经想出了如何设置PATH它以便正确找到文件。但是,OS X Java 无法加载.so文件(因为它需要其他扩展名)。

如果我将文件扩展名从 更改.so.jnilib,JVM 可以找到文件但无法读取它们(因为它们已被错误编译)。

在没有源代码的情况下,在 Linux 系统或 Mac OS X 中,有什么方法可以将这些.so文件转换为.jnilib? 我怀疑这是不可能的,但 Stack Overflow 还没有让我失望——而且我不会把“这不可能”算作失败。

4

1 回答 1

4

您是否尝试在 Mac OS X 上为 Linux 使用本机库?不,那是行不通的。

您需要获取本地库的 Mac 版本并将其重命名为 jnilib,如果它还没有该后缀。

这是 JVM 字节码和本机代码之间的主要区别。本机代码非常特定于平台。我们甚至为不同的 linux 风格提供了多个版本的 JNI 库。

由于 Mac 和 Linux 都使用相同的 CPU,并且它们都是基于 Unix 的,我不会说这是不可能的,即使它非常接近。

于 2009-09-29T22:14:55.040 回答