UnsatisfiedLinkError con jar sqlite4java en Mac OS X NetBeans
Estoy experimentando un problema similar a esta pregunta:
UnsatisfiedLinkError con sqlite4java Jar en Mac OS X
Sin embargo, estoy ejecutando en una Mac y tengo las bibliotecas relevantes en mi carpeta lib. Sin embargo, si ejecuto esto como es, obtengo el archivo UnsatisfiedLinkError. Si ejecuto "java -jar sqlite4java.jar -d" obtengo el siguiente resultado:
sqlite4java 282
130321:222850.424 FINE [sqlite] Internal: loading library
130321:222850.425 FINE [sqlite] Internal: java.library.path=/Users/mikey/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
130321:222850.425 FINE [sqlite] Internal: sqlite4java.library.path=null
130321:222850.425 FINE [sqlite] Internal: cwd=/Users/mikey/NetBeansProjects/Test/lib/.
130321:222850.425 FINE [sqlite] Internal: default path=/Users/mikey/NetBeansProjects/Test/lib
130321:222850.425 FINE [sqlite] Internal: forced path=null
130321:222850.426 FINE [sqlite] Internal: os.name=mac os x; os=osx
130321:222850.426 FINE [sqlite] Internal: os.arch=x86_64
130321:222850.426 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64
130321:222850.427 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path
130321:222850.427 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64
130321:222850.428 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64 in java.library.path
130321:222850.428 FINE [sqlite] Internal: trying to load sqlite4java-osx-10.4
130321:222850.431 INFO [sqlite] Internal: loaded sqlite4java-osx-10.4 from system path
130321:222850.433 INFO [sqlite] Internal: loaded sqlite 3.7.10, wrapper 0.2
SQLite 3.7.10
Compile-time options: ENABLE_COLUMN_METADATA ENABLE_FTS3 ENABLE_FTS3_PARENTHESIS ENABLE_LOCKING_STYLE=0 ENABLE_MEMORY_MANAGEMENT ENABLE_RTREE OMIT_DEPRECATED TEMP_STORE=1 THREADSAFE=1
Puedo ver que está buscando la biblioteca sqlite4java-osx-x86_64, por lo que luego corrí tanto "ln -s libsqlite4java-osx.jnilib libsqlite4java-osx-x86_64.jnilib" como "ln -s libsqlite4java-osx-10.4. libsqlite4java-osx-x86_64.jnilib "y eso parece ayudar:
sqlite4java 282
130321:223211.473 FINE [sqlite] Internal: loading library
130321:223211.474 FINE [sqlite] Internal: java.library.path=/Users/mikey/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
130321:223211.474 FINE [sqlite] Internal: sqlite4java.library.path=null
130321:223211.474 FINE [sqlite] Internal: cwd=/Users/mikey/NetBeansProjects/Test/lib/.
130321:223211.474 FINE [sqlite] Internal: default path=/Users/mikey/NetBeansProjects/Test/lib
130321:223211.474 FINE [sqlite] Internal: forced path=null
130321:223211.475 FINE [sqlite] Internal: os.name=mac os x; os=osx
130321:223211.475 FINE [sqlite] Internal: os.arch=x86_64
130321:223211.475 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64
130321:223211.477 INFO [sqlite] Internal: loaded sqlite4java-osx-x86_64 from system path
130321:223211.479 INFO [sqlite] Internal: loaded sqlite 3.7.10, wrapper 0.2
SQLite 3.7.10
Compile-time options: ENABLE_COLUMN_METADATA ENABLE_FTS3 ENABLE_FTS3_PARENTHESIS ENABLE_MEMORY_MANAGEMENT ENABLE_RTREE OMIT_DEPRECATED TEMP_STORE=1 THREADSAFE=1
Parece bien, ¿verdad? No. Cuando intento ejecutar mi código Java, vuelve a fallar cuando se intenta abrir la base de datos con el error de conexión de enlace insatisfecho.
¿Hay algo obvio que me estoy perdiendo? Aquí hay un ls de la parte relevante de mi directorio lib como una comprobación de validez:
-rw-r--r--@ 1 mikey staff 466792 1 Mar 2012 libsqlite4java-android-armv7.so
-rw-r--r--@ 1 mikey staff 790986 1 Mar 2012 libsqlite4java-linux-amd64.so
-rw-r--r--@ 1 mikey staff 732637 1 Mar 2012 libsqlite4java-linux-i386.so
-rw-r--r--@ 1 mikey staff 1400368 1 Mar 2012 libsqlite4java-osx-10.4.jnilib
-rw-r--r--@ 1 mikey staff 1401592 1 Mar 2012 libsqlite4java-osx-ppc.jnilib
lrwxr-xr-x 1 mikey staff 25 21 Mar 22:31 libsqlite4java-osx-x86_64.jnilib -> libsqlite4java-osx.jnilib
-rw-r--r--@ 1 mikey staff 1433640 1 Mar 2012 libsqlite4java-osx.jnilib
-rw-r--r-- 1 mikey staff 928 17 Mar 17:05 nblibraries.properties
drwxr-xr-x 3 mikey staff 102 15 Mar 18:59 sqlite4java
drwxr-xr-x 13 mikey staff 442 19 Mar 17:49 sqlite4java-282 2
-rw-r--r--@ 1 mikey staff 102236 1 Mar 2012 sqlite4java-docs.zip
-rw-r--r--@ 1 mikey staff 100502 1 Mar 2012 sqlite4java-src.zip
-rw-r--r--@ 1 mikey staff 622080 1 Mar 2012 sqlite4java-win32-x64.dll
-rw-r--r--@ 1 mikey staff 462848 1 Mar 2012 sqlite4java-win32-x86.dll
-rw-r--r--@ 1 mikey staff 129381 1 Mar 2012 sqlite4java.jar
Y una copia de mi código de conexión de base de datos:
import com.almworks.sqlite4java.SQLiteConnection;
import com.almworks.sqlite4java.SQLiteException;
import java.io.File;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Wrapper for Sqlite
*
* @author mikey
*/
public class Database {
private SQLiteConnection db;
public Database() {
db = new SQLiteConnection(new File("./test.db"));
try {
db.open(true);
} catch (SQLiteException ex) {
Logger.getLogger(Database.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Gracias por cualquier luz que puedas arrojar sobre mi problema ...
EDITAR
En respuesta a @sereda, aquí está el resultado de poner "com.almworks.sqlite4java.SQLite.main (new String [] {" -d "});" en el código de conexión de la base de datos:
sqlite4java 282
130322:161109.097 FINE [sqlite] Internal: loading library
130322:161109.099 FINE [sqlite] Internal: java.library.path=/Users/mikey/Library/Java/Extensions:/Library/Java/Extensions:/Network/Library/Java/Extensions:/System/Library/Java/Extensions:/usr/lib/java:.
130322:161109.100 FINE [sqlite] Internal: sqlite4java.library.path=null
130322:161109.100 FINE [sqlite] Internal: cwd=/Users/mikey/NetBeansProjects/Test/.
130322:161109.101 FINE [sqlite] Internal: default path=/Users/mikey/NetBeansProjects/Test/lib
130322:161109.101 FINE [sqlite] Internal: forced path=null
130322:161109.102 FINE [sqlite] Internal: os.name=mac os x; os=osx
130322:161109.102 FINE [sqlite] Internal: os.arch=x86_64
130322:161109.105 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64
130322:161109.108 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path
130322:161109.108 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64
130322:161109.112 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64 in java.library.path
130322:161109.112 FINE [sqlite] Internal: trying to load sqlite4java-osx-10.4
130322:161109.115 FINE [sqlite] Internal: cannot load sqlite4java-osx-10.4: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-10.4 in java.library.path
130322:161109.115 FINE [sqlite] Internal: trying to load sqlite4java-osx
130322:161109.118 FINE [sqlite] Internal: cannot load sqlite4java-osx: java.lang.UnsatisfiedLinkError: no sqlite4java-osx in java.library.path
130322:161109.119 FINE [sqlite] Internal: trying to load sqlite4java
130322:161109.122 FINE [sqlite] Internal: cannot load sqlite4java: java.lang.UnsatisfiedLinkError: no sqlite4java in java.library.path
130322:161109.123 FINE [sqlite] Internal: trying to load sqlite4java-osx-x86_64-d
130322:161109.127 FINE [sqlite] Internal: cannot load sqlite4java-osx-x86_64-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64-d in java.library.path
130322:161109.127 FINE [sqlite] Internal: trying to load sqlite4java-osx-amd64-d
130322:161109.131 FINE [sqlite] Internal: cannot load sqlite4java-osx-amd64-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-amd64-d in java.library.path
130322:161109.131 FINE [sqlite] Internal: trying to load sqlite4java-osx-10.4-d
130322:161109.134 FINE [sqlite] Internal: cannot load sqlite4java-osx-10.4-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-10.4-d in java.library.path
130322:161109.134 FINE [sqlite] Internal: trying to load sqlite4java-osx-d
130322:161109.137 FINE [sqlite] Internal: cannot load sqlite4java-osx-d: java.lang.UnsatisfiedLinkError: no sqlite4java-osx-d in java.library.path
130322:161109.138 FINE [sqlite] Internal: trying to load sqlite4java-d
130322:161109.141 FINE [sqlite] Internal: cannot load sqlite4java-d: java.lang.UnsatisfiedLinkError: no sqlite4java-d in java.library.path
Error: cannot load SQLite
java.lang.UnsatisfiedLinkError: no sqlite4java-osx-x86_64 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:845)
at java.lang.System.loadLibrary(System.java:1084)
at com.almworks.sqlite4java.Internal.tryLoadFromSystemPath(Internal.java:349)
at com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:124)
at com.almworks.sqlite4java.SQLite.main(SQLite.java:368)
at frakdeck.Database.<init>(Database.java:19)
at frakdeck.Test.start(Test.java:22)
at com.sun.javafx.application.LauncherImpl$5.run(LauncherImpl.java:319)
at com.sun.javafx.application.PlatformImpl$5.run(PlatformImpl.java:215)
at com.sun.javafx.application.PlatformImplParece bien, ¿verdad? No. Cuando intento ejecutar mi código Java, vuelve a fallar cuando se intenta abrir la base de datos con el error de conexión de enlace insatisfecho.1.run(PlatformImpl.java:179)
at com.sun.javafx.application.PlatformImplParece bien, ¿verdad? No. Cuando intento ejecutar mi código Java, vuelve a fallar cuando se intenta abrir la base de datos con el error de conexión de enlace insatisfecho.1.run(PlatformImpl.java:176)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$4.run(PlatformImpl.java:176)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:76)