2013-01-11 12 views
8

Ho progetto NetBeans da tutorial che causa eccezione:Tentativo di utilizzare DLL da Java (JNA). Impossibile caricare eccezione libreria

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'simpleDLL': il modulo specificato non è stato trovato.

Si è tentato di inserire simpleDLL.dll nelle librerie di progetto, il file copiato nella cartella system32 senza esito positivo.

+2

si prega di verificare se il simpleDLL è a 32 o 64 bit. Quindi controllare, se la JVM è anche a 32 o 64 bit. devono essere per la stessa piattaforma. –

+0

provato con un'altra DLL e JNI. Sembra funziona – Karloss

risposta

11

Ho avuto esattamente lo stesso problema con il caricamento di una DLL, ho risolto in questo modo:

  • Come Christian Kuetbach ha detto, controlla se la simpleDLL che stai usando è compatibile con l'architettura del tuo processore, una DLL a 32 bit non funzionerà su una macchina a 64 bit, e anche una DLL a 64 bit non funzionerà su una 32 bit macchina.
  • Se la DLL è compatibile, il problema potrebbe essere nel percorso della libreria java. Ho messo la mia DLL nella directory user.dir e poi ho usato questo codice:

    Set Java percorso di libreria a user.dir o forse un altro percorso che si desidera:

    String myLibraryPath = System.getProperty("user.dir");//or another absolute or relative path 
    
    System.setProperty("java.library.path", myLibraryPath); 
    

    caricare la libreria:

    System.loadLibrary ("libraryWithoutDLLExtension");

Ha funzionato per me, provalo e dimmi se funziona per te.

+0

Ho usato questo codice dopo 'public static void main (String [] args) {'. La mia libreria si trova in user.dir. Stesso risultato - eccezione – Karloss

+0

'Eccezione nel thread" main "java.lang.UnsatisfiedLinkError: C: \ Windows \ System32 \ simpleDLL.dll: impossibile trovare librerie dipendenti' – Karloss

+0

Non è nel tuo utente.dir, user.dir è il percorso in cui si trova il programma java, a meno che non lo abbia localizzato in C: \ Windows \ System32 \ non hai la tua DLL in user.dir – BackSlash

5

Verificare che simpleDLL sia 32 o 64 bit. Quindi controlla se la JVM è anche a 32 o 64 bit. Devono essere per la stessa piattaforma.

È inoltre possibile specificare un percorso assoluto, se si cambia loadLibrary() a load(): http://www.chilkatsoft.com/p/p_499.asp

+0

Grazie per favore risposta accettabili! Controllato simpleDLL con il comando "file" di Cygwin, questa DLL è a 32 bit, ho anche una macchina a 32 bit. – Karloss

+0

Provato con il percorso assoluto con gli stessi risultati – Karloss

2

Ho potuto eseguire solo in 32 bit (Xp).

inserire la DLL nella cartella "C: \ Windows \ System32"

helloWorldDLL lib = (helloWorldDLL) Native.loadLibrary("helloworldDLL", helloWorldDLL.class);

Se l'java.lang.UnsatisfiedLinkError errore: Impossibile caricare la libreria" persiste, utilizzare Dependency Walker per visualizzare le DLL dipendenti.

Dependency Walker

Problemi correlati