Małe tło: Mam aplikację java, która musi rozmawiać ze sprzętem innej firmy na mac. Dali mi SDK, ale nie jest to w Javie. Tak próbuję zrobić jnilib, który będzie działać jako pomost między moją aplikacją java i SDK.Mac + jni + java
Emisja: Zrobiłem małą próbkę jnilib który mówi do SDK, ale gdy próbuję go używać w moim programie java otrzymuję następujący błąd
Exception in thread "main" java.lang.UnsatisfiedLinkError: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib: Library not loaded: build/Release/SMARTResponseSDK.framework/Versions/A/SMARTResponseSDK Referenced from: /Users/john.doe/Desktop/eclipse/workspace/Lesson13_Jni_Smart7/bin/libSmartTest7.jnilib
Reason: image not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1827)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1742)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1045)
at com.learning.lesson13.JniSmart7.<clinit>(JniSmart7.java:6)
od błędu wygląda jak mój libSmartTest7.jnilib
szuka biblioteki SMARTResponseSDK
.
Co próbowałem Wiem, gdzie jest biblioteka SMARTResponseSDK
na moim Macu. Próbowałem skopiować go do mojego folderu roboczego w czasie zaćmienia, ale nadal dostaję błąd. Próbowałem używać -DJava.library.path
, ale nadal dostaję błąd.
Wszelkie pomysły na temat najlepszego możliwego podejścia.
Na OSX biblioteka musi znajdować się wewnątrz zmiennej java.library.path lub DYLD_LIBRARY_PATH. Powinieneś również sprawdzić swoją bibliotekę, aby upewnić się, że nie używa ona określonej ścieżki bezwzględnej dla biblioteki zależnej (chyba, że znajduje się w lokalizacji zainstalowanej na systemie). – technomage
Witam Dziękuję za Twój komentarz. Przykro mi, ale wygląda na to, że to był mój błąd. Były dwie biblioteki "SMARTResponseSDK". wygląda na to, że użyłem niewłaściwego podczas budowania mojego jnilib. Użyłem innego "SMARTResponseSDK" i problem wydaje się być wyczyszczony. – user1216750
Możesz także rozważyć Rococoa, które pozwala uniknąć pisania natywnego kodu i dostępu do biblioteki innej firmy bezpośrednio z Javy. – technomage