2013-03-08 104 views
6

当使用Java Attach API,我得到以下链接错误上的Linux(试图在不同的机器上)唯一的:的Java连接API:UnsatisfiedLinkError

Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.tools.attach.WindowsAttachProvider.tempPath()Ljava/lang/String; 
     at sun.tools.attach.WindowsAttachProvider.tempPath(Native Method) 
     at sun.tools.attach.WindowsAttachProvider.isTempPathSecure(WindowsAttachProvider.java:74) 
     at sun.tools.attach.WindowsAttachProvider.listVirtualMachines(WindowsAttachProvider.java:58) 
     at com.sun.tools.attach.VirtualMachine.list(VirtualMachine.java:134) 
     at sun.tools.jconsole.LocalVirtualMachine.getAttachableVMs(LocalVirtualMachine.java:151) 
     at sun.tools.jconsole.LocalVirtualMachine.getAllVirtualMachines(LocalVirtualMachine.java:110) 
     ... 

有趣的是,Solaris和Windows上它的工作开箱即用。

我尝试了几种指定java.library.path的组合指向包含libattach.so但没有运气的目录。

这里有什么问题?

作为奖励问题
有没有办法看到哪个本地库实际上绑定到一个java类?

+0

你可以在LD_LIBRARY_PATH中找到这个库吗? – longhua 2013-03-08 09:30:25

+0

我也试过将它添加到LD_LIBRARY_PATH - 但它没有帮助。在Solaris上它也不在LD_LIBRARY_PATH上,但它在这里工作。 – MRalwasser 2013-03-08 09:32:12

+1

看来这个库与您使用的Java类不兼容。他们是否来自同一个JDK?在LD_LIBRARY_PATH或java.library.path中是否还有其他库具有相同的名称? – longhua 2013-03-08 10:12:34

回答

6

不同的AttachProvider用于不同的平台。在Linux上,它不应该使用sun.tools.attach.WindowsAttachProvider。它适用于Windows。

[solaris] sun.tools.attach.SolarisAttachProvider 
[windows] sun.tools.attach.WindowsAttachProvider 
[linux] sun.tools.attach.LinuxAttachProvider 

这是在资源文件中META-INF \ SERVICES \ com.sun.tools.attach.spi.AttachProvider(通常这个文件存在的tools.jar)配置。它将搜索CLASSPATH以获取此资源文件的第一个出现,并从中读取AttachProvider实现类。

所以你可以通过在你的CLASSPATH中搜索sun.tools.attach.WindowsAttachProvider来解决这个问题。可能你已经包含了一个来自Windows的tools.jar。