将.so文件转换为.jnilib文件

时间:2009-09-29 21:55:16

标签: java linux macos java-native-interface elf

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

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

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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