我正在尝试使用Eclipse插件捆绑本机库。当我使用-Djava.library.path
提供库的路径时,它的工作非常完美。
但是,当我将其添加到MANIFEST.MF
文件时,它会抛出一个异常,说明
Exception in thread "Thread-9" java.lang.UnsatisfiedLinkError: no XpNamedPipeJni in java.library.path
MANIFEST.MF
中的代码是
Bundle-NativeCode: lib/XpNamedPipeJni.dll; lib/XpNamedPipeJni_64.dll; osname=Win32; processor=x86; processor=x86-64,
lib/libXpNamedPipeJni.dylib; osname=MacOSX; processor=x86; processor=PowerPC; processor=x86-64
有趣的是,它在Windows中使用Bundle-NativeCode: lib/XpNamedPipeJni.dll; lib/XpNamedPipeJni_64.dll
完美运行。当我为Mac OS添加另一行时出现问题。我也试过了Bundle-NativeCode: lib/libXpNamedPipeJni.dylib
。不起作用。
我尝试了来自OSGi specifications here的操作系统/处理器值的所有可能排列。
答案 0 :(得分:3)
解决了。我正在使用库的错误扩展。我将扩展程序从dylib
更改为jnilib
并且有效。显然,OS X上的Java VM似乎要求文件扩展名为.jnilib
。关于这背后原因的任何想法?
现在代码看起来像
Bundle-NativeCode: lib/XpNamedPipeJni.dll; osname=Win32; processor=x86,
lib/XpNamedPipeJni_64.dll; osname=Win32; processor=x86_64,
lib/libXpNamedPipeJni.jnilib; osname=macosx; processor=x86; processor=x86_64; processor=ppc
答案 1 :(得分:0)
如果你的eclipse无法加载XpNamedPipeJni.dylib(或任何filename.dylib),那因为eclipse试图通过调用 System.loadLibrary(fileName)和eclipse从System加载它无法从装载位置找到它,因为文件在这些位置不存在。
要查看所有eclipse尝试加载它的位置,请在代码中添加以下行:
String locations = System.getProperty("java.library.path");
查看所有位置并将文件复制到任何这些位置(如果位置不存在,则创建并复制)。 重启日食,它现在可以正常工作。