我有一个以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还没有让我失望 - 而且我不会把“它不可能”视为失败。
答案 0 :(得分:3)
您是否尝试在Mac OS X上使用Linux本机库?不,那不行。
如果没有该后缀,您需要获取本机库的Mac版本并将其重命名为jnilib。
这是JVM字节代码和本机代码之间的主要区别。本机代码非常特定于平台。我们甚至为不同的Linux风格提供了多个版本的JNI库。
由于Mac和Linux都使用相同的CPU并且它们都是基于Unix的,我不会说这是不可能的,即使它非常接近。