2013-03-08 12 views
6

Przy użyciu Java Attach API, otrzymuję następujący błąd link na Linux (próbowałem na różnych komputerach) tylko:Java Attach 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) 
     ... 

Co ciekawe, na Solaris i Windows to działa po wyjęciu z pudełka.

Wypróbowałem kilka kombinacji określania java.library.path, aby wskazać katalog zawierający libattach.so, ale bez powodzenia.

Co jest nie tak?
I jako pytanie dodatkowe:
Czy istnieje sposób sprawdzenia, która biblioteka natywna jest faktycznie związana z klasą Java?

+0

Czy możesz znaleźć tę bibliotekę w LD_LIBRARY_PATH? – longhua

+0

Próbowałem również dodać do LD_LIBRARY_PATH - ale to nie pomogło. W systemie Solaris nie ma go również w LD_LIBRARY_PATH, ale działa tutaj. – MRalwasser

+1

Wygląda na to, że biblioteka jest niezgodna z używaną klasą Java. Czy pochodzą z tego samego JDK? Czy istnieje inna biblioteka o tej samej nazwie w LD_LIBRARY_PATH lub java.library.path? – longhua

Odpowiedz

6

Różne AttachProvider są używane na różnych platformach. W systemie Linux nie powinno używać sun.tools.attach.WindowsAttachProvider. Dotyczy systemu Windows.

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

ten jest skonfigurowany w pliku zasobów META-INF \ Services \ com.sun.tools.attach.spi.AttachProvider (zazwyczaj istnieje ten plik w tools.jar). Przeszuka CLASSPATH, aby uzyskać pierwsze wystąpienie tego pliku zasobów i odczytać z niego klasę implementacji AttachProvider.

Prawdopodobnie można rozwiązać ten problem, wyszukując sun.tools.attach.WindowsAttachProvider w zmiennej CLASSPATH. Być może podałeś plik tools.jar z systemu Windows.