java.lang.UnsatisfiedLinkError:java.library.path中没有库

时间:2012-07-17 05:02:49

标签: eclipse macos eclipse-plugin java-native-interface unsatisfiedlinkerror

我正在尝试使用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的操作系统/处理器值的所有可能排列。

2 个答案:

答案 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");

查看所有位置并将文件复制到任何这些位置(如果位置不存在,则创建并复制)。 重启日食,它现在可以正常工作。