Un poco de fondo: Tengo una aplicación de Java que necesita hablar con un hardware de terceros en mac. Me han dado el SDK pero no está en Java. Así que estoy tratando de hacer jnilib que actuará como un puente entre mi aplicación java y el SDK.Mac + jni + java
El problema: he hecho una pequeña jnilib muestra que se comunica con el SDK, pero cuando trato de usarlo en mi programa de java me sale el siguiente error
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)
Desde el error parece que mi libSmartTest7.jnilib
está buscando la biblioteca SMARTResponseSDK
.
Lo que he intentado Sé dónde está la biblioteca SMARTResponseSDK
en mi Mac. Intenté copiarlo en mi carpeta de trabajo en Eclipse, pero sigo recibiendo el error. He intentado usar el -DJava.library.path
pero sigo recibiendo el error.
Cualquier idea sobre cuál sería el mejor enfoque posible.
En OSX, la biblioteca debe encontrarse dentro de java.library.path o de la variable de entorno DYLD_LIBRARY_PATH. También debe verificar su biblioteca para asegurarse de que no utiliza una ruta absoluta específica para la biblioteca dependiente (a menos que esté en una ubicación instalada en el sistema). – technomage
Hola Gracias por tu comentario. Lo siento, pero parece que fue un error mío. Había dos bibliotecas "SMARTResponseSDK". parece que usé el incorrecto mientras construía mi jnilib. Utilicé el otro "SMARTResponseSDK" y el problema parece haberse solucionado. – user1216750
También puede considerar Rococoa, que le permite evitar escribir cualquier código nativo y acceder a la biblioteca de terceros directamente desde Java. – technomage