2009-09-29 129 views
2

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

如果我将文件扩展名从.so更改为.jnilib,则JVM可以找到这些文件但无法读取它们(因为它们编译不正确)。

有什么办法,无论是在Linux系统或Mac OS X中,没有源代码,这些.so文件转换为.jnilib?我怀疑这是不可能的,但Stack Overflow并没有让我失望 - 而且我不会把“这不可能”当作失败。

回答

3

您是否试图在Mac OS X上使用适用于Linux的本机库?不,那不行。

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

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

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

+0

这就是我所害怕的。为了回应你的第一个问题,是的,这就是我想要做的,但不幸的是,我无法获得Mac版本的本地库 - 该公司使它没有可用的Mac版本。 – 2009-09-29 22:21:29