2010-03-15 23 views
9

Kiedy próbuję uruchomić mój program to daje następujący błądJaka jest przyczyna UnsatisfiedLinkError?

 Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.14.3-x86 in java.library.path 
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682) 
at java.lang.Runtime.loadLibrary0(Runtime.java:823) 
at java.lang.System.loadLibrary(System.java:1030) 
at com.jacob.com.LibraryLoader.loadJacobLibrary(LibraryLoader.java:184) 
at com.jacob.com.JacobObject.<clinit>(JacobObject.java:108) 
at javaSMSTest.main(javaSMSTest.java:18) 

Proszę o pomoc

+0

Proszę zmienić tytuł, aby był bardziej wyraźny. – chburd

+1

Czy mógłbyś też opublikować swój kod (w szczególności 'LibraryLoader.loadJacobLibrary()')? –

Odpowiedz

20

Z Javadoc:

rzucony jeżeli maszyna wirtualna Java nie może znaleźć odpowiedniego rodem -językowa definicja metody uznanej za natywną.

Jest to błąd związany z JNI. loadJacobLibrary próbuje załadować natywną bibliotekę o nazwie jacob-1.14.3-x86 i nie można jej znaleźć w ścieżce zdefiniowanej przez java.library.path. Tę ścieżkę należy zdefiniować jako właściwość systemową po uruchomieniu maszyny JVM. na przykład

-Djava.library.path=<dir where jacob library is> 

W Windows rzeczywisty plik biblioteki natywnej zostanie wywołana Jacob-1.14.3-x86.dll podczas Linux byłoby nazwać libjacob-1.14.3-x86.so

+0

nie nazwałoby to libjacob-1.14.3-x86.so zamiast tego? –

+1

Tak ... Naprawiono. – Mark

+0

Dodam, że ścieżka nie powinna kończyć się ukośnikiem/ukośnikiem odwrotnym - tylko z nazwą katalogu (o Boże, robiłem ten błąd) –

1

potrzebujesz biblioteka jacob-1.14.3-x86 na ścieżce do biblioteki Java.

W systemie Windows byłby to plik jacob-1.14.3-x86.dll.

Jest to plik binarny używany przez język Java do uruchamiania metod natywnych. Prawdopodobnie jest to wymagane przez jakąś bibliotekę (jar), której używasz.

W here widać nie tylko słoik, ale także plik binarny wymagany przez słoik. Wybierz tę dla swojej platformy.

0

Cytując http://www.velocityreviews.com/forums/t143642-jni-unsatisfied-link-error-but-the-method-name-is-correct.html:

Są dwie rzeczy, które powodują UnsatisfiedLinkError. Pierwsza to sytuacja, w której System.loadLibrary() nie może załadować biblioteki, a druga to sytuacja, gdy JVM nie znajdzie konkretnej metody w bibliotece. Tekst komunikatu o błędzie będzie wskazywał, w którym przypadku ...

Błąd, który opisujesz wyraźnie, nie może w ogóle znaleźć biblioteki. Jak powiedzieli inni, umieść go w swojej ścieżce biblioteki Java.

Drugi błąd — gdy biblioteka można znaleźć ale metoda w bibliotece nie znaleziono — wygląda następująco:

java.lang.UnsatisfiedLinkError: myObject.method([Ljava/lang/Object;)V 

W tym przypadku trzeba albo niewłaściwą nazwę metody, albo będzie musiał wróć i dodaj metodę i ponownie skompiluj kod ...

Powiązane problemy