Un po 'di background: Ho un'applicazione java che deve comunicare con un hardware di terze parti su mac. Mi hanno dato il sdk ma non è in Java. Quindi sto cercando di creare jnilib che funga da ponte tra la mia applicazione java e l'SDK.Mac + jni + java
Il problema: ho fatto un piccolo jnilib campione che parla al SDK, ma quando cerco di usarlo nel mio programma java ricevo il seguente errore
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)
Da l'errore sembra che il mio libSmartTest7.jnilib
sta cercando la libreria SMARTResponseSDK
.
Quello che ho provato So dove si trova la libreria SMARTResponseSDK
sul mio Mac. Ho provato a copiarlo nella mia cartella di lavoro in eclipse, ma ho ancora ricevuto l'errore. Ho provato a utilizzare il -DJava.library.path
ma ottengo ancora l'errore.
Qualche idea su quale sarebbe il miglior approccio possibile.
Su OSX, la libreria deve essere trovata all'interno di java.library.path o della variabile di ambiente DYLD_LIBRARY_PATH. È inoltre necessario controllare la libreria per assicurarsi che non stia utilizzando un percorso assoluto specifico per la libreria dipendente (a meno che non si trovi in un percorso installato dal sistema). – technomage
Ciao Grazie per il tuo commento. Mi dispiace ma sembra che sia stato un mio errore. C'erano due librerie "SMARTResponseSDK". sembra che ho usato quello sbagliato mentre costruivo il mio jnilib. Ho usato l'altro "SMARTResponseSDK" e il problema sembra essere stato cancellato. – user1216750
Si potrebbe anche prendere in considerazione Rococoa, che consente di evitare di scrivere qualsiasi codice nativo e accedere alla libreria di terze parti direttamente da Java. – technomage