2014-11-23 30 views
11

Correndo in alcuni problemi facendo girare un pezzo di codice sul mio mac. Qualcuno mi ha scritto un'app java per l'analisi delle immagini, ma continuo a ricevere questo errore quando provo a eseguirlo su netbeans.UnsatisfiedLinkError: no opencv_java249 in java.library.path

run: Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java249 in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) at java.lang.Runtime.loadLibrary0(Runtime.java:870) at java.lang.System.loadLibrary(System.java:1119) at image.prossing.Test.main(Test.java:28) Java Result: 1 BUILD SUCCESSFUL (total time: 0 seconds)

Avere il progetto netbeans e aggiunto i file jar necessari come librerie. Il programmatore mi ha detto di scaricare la versione corretta di OpenCV e di copiare il file opencv.dll nella mia cartella java/jre/bin. Ma non riesco a trovare il file dll o la cartella java/jre. So che la maggior parte della programmazione si verifica su Windows per un motivo. Spero che qualcuno possa aiutarmi a risolvere questo problema ed eseguire questa applicazione sul mio Mac.

Ecco la prima parte del codice, la parte che è molto probabilmente creando l'errore:

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package image.prossing; 

/** 
* 
* @author Dumith Salinda 
*/ 
import java.util.ArrayList; 
import java.util.List; 
import org.opencv.core.Core; 
import static org.opencv.core.Core.FONT_HERSHEY_SIMPLEX; 
import org.opencv.core.Mat; 
import org.opencv.core.MatOfPoint; 
import org.opencv.core.Point; 
import org.opencv.core.Rect; 
import org.opencv.core.Scalar; 
import org.opencv.highgui.Highgui; 
import org.opencv.imgproc.Imgproc; 

public class Test { 

public static void main(String[] args) { 

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

Scusate se non è chiaro, fatemi sapere cosa informazioni da aggiungere se manca qualcosa o no chiaro. Apprezzerei davvero ogni aiuto che potresti dare. Sinceramente Meir Warcel

+0

Controllare come impostare il percorso di librerie native in JNI – SJuan76

+0

così ha fatto si tenta di utilizzare libreria di ricompilazione per Mac o di ottenere Versione per Mac, e se sì, ha funzionato per te? –

risposta

1

eccezione si sta verificando da sotto riga di codice:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

tuo programma sta tentando di caricare una libreria nativa con il nome di argomento nella chiamata al loadLibrary metodo, che non è in grado di individuare. Assicurarsi che la libreria nativa (opencv.dll) sia collocata in una delle posizioni presenti nella proprietà di sistema java.library.path mentre JVM esamina queste posizioni per caricare qualsiasi libreria nativa (che potrebbe non contenere 'java/jre/bin').

È possibile stampare java.library.path nel vostro programma come di seguito:

System.out.println(System.getProperty("java.library.path")); 
+0

Penso che manchi il punto che Meir sta cercando di collegarsi alla libreria di Windows (file '.dll') mentre esegue il suo codice su Mac. –

+0

@striving_coder Oh..yes! non funzionerà con .dll su Mac. Meir ha bisogno di ottenere una libreria per Mac. – sjain

0

Basta aggiungere nel percorso della cartella in cui il vostro opencv_java249.dll è; sarebbe qualcosa come C:\bin\opencv\build\java\x32 o C:\bin\opencv\build\java\x64 a seconda dell'architettura della macchina. Il problema è che java.library.path è in realtà la variabile path.

6

Su un Mac che esegue OSX Yosemite, ho rilasciato il file libopencv_java2412.dylib in /Library/Java/Extensions e ha funzionato.

Dopo aver creato opencv, libopencv_java2412.dylib viene generato in/build/lib.

+0

Bravo! Funziona anche su El Capitan. – danielhadar

+0

Anche su Sierra. – Spindizzy

15

Cerca nella directory di OpenCV;

Per un esempio questo; (installato utilizzando brew install opencv3 --with-java --with-python3)

/usr/local/Cellar/opencv3/XXX/share/OpenCV/java 

Vedrai;

libopencv_javaXXX.so opencv-XXX.jar 

Ora che hai già libreria nativa di OpenCV per Java (libopencv_javaXXX.so) compilato con voi, l'unica cosa che resta è, libreria dinamica del mac.

Link libopencv_javaXXX.so a libopencv_javaXXX.dylib;

ln -s libopencv_javaXXX.so libopencv_javaXXX.dylib 

Ora aggiungere /usr/local/Cellar/opencv3/XXX/share/OpenCV/java come Biblioteca Sedi nativi in IntelliJ o qualcosa di simile in Eclipse.

Oppure aggiungilo ai tuoi argomenti JVM;

-Djava.library.path=/usr/local/Cellar/opencv3/XXX/share/OpenCV/java 
+0

questo ha aiutato molto !!!! interessante come un piccolo trucco porti nelle librerie collegate – iGbanam

+0

'-Djava.library.path =' è la strada da percorrere: ti dà più flessibilità per compilare diverse versioni di OpenCV e scegliere quale eseguire, ad es. per confrontare le prestazioni. – WillC

-1

netebans diritto progetto Klick chosew Properti ha scelto correre, direktory di lavoro, fare clic su Modifica Browser nella cartella OpenCV, rilascio/lib,

2

Dopo aver trascorso un sacco di tempo, e utilizzando diversi suggerimenti da StackOverflow sono riuscito per ottenere una soluzione per Windows. ma sto aggiungendo anche una soluzione per mac. spero che dovrebbe funzionare

  1. Caricare la lib come indicato nella configurazione del sistema.

    private static void loadLibraries() { 
    
        try { 
         InputStream in = null; 
         File fileOut = null; 
         String osName = System.getProperty("os.name"); 
         String opencvpath = System.getProperty("user.dir"); 
         if(osName.startsWith("Windows")) { 
          int bitness = Integer.parseInt(System.getProperty("sun.arch.data.model")); 
          if(bitness == 32) { 
           opencvpath=opencvpath+"\\opencv\\x86\\"; 
          } 
          else if (bitness == 64) { 
           opencvpath=opencvpath+"\\opencv\\x64\\"; 
          } else { 
           opencvpath=opencvpath+"\\opencv\\x86\\"; 
          }   
         } 
         else if(osName.equals("Mac OS X")){ 
          opencvpath = opencvpath+"Your path to .dylib"; 
         } 
         System.out.println(opencvpath); 
         System.load(opencvpath + Core.NATIVE_LIBRARY_NAME + ".dll"); 
        } catch (Exception e) { 
         throw new RuntimeException("Failed to load opencv native library", e); 
        } 
    } 
    

2.now utilizzare questo metodo secondo il vostro bisogno

public static void main(String[] args) { 
    loadLibraries(); 
} 
+0

Questa risposta non sembra rispondere alla domanda, che non riguarda Windows, ma il Mac. Inoltre, per favore spiega cosa fa il tuo codice e perché e in che modo risolve il problema. –