2016-02-12 26 views
14

Ho appena installato il Matlab Runtime:java.library.path, classpath Netbeans 8.0.2

Distributor ID: Ubuntu 
Description: Ubuntu 15.04 
Release: 15.04 
Codename: vivid 

È possibile trovare il tempo di esecuzione Matlab here nel mio caso in installato R2015b (9,0) * (MATLAB Runtime 9.0, per R2015b, è progettato per funzionare con MATLAB 8.6, che è anche R2015b).

Le librerie Matlab vengono installati a:/usr/local/MATLAB

Sto usando Netbeans 8.0.2

java version "1.8.0_45" 
Java(TM) SE Runtime Environment (build 1.8.0_45-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode) 

L'errore che ottengo il mio programma è il seguente:

Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the required library libmwmclmcrrt.so.9.0 on java.library.path. 
This library is typically installed along with MATLAB or the MCR. Its absence may indicate an issue with that installation or the current path configuration. 
The MCR version that this component is trying to use is: 9.0. 

Sulla installazione di Matlab che fa dire:

On the target computer, append the following to your LD_LIBRARY_PATH environment variable: /usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64: 

Ho aggiunto questa linea a Project> Proprietà> Opzioni VM:

-Djava.library.path="/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:" 

E ho aggiunto le stesse cartelle di progetto> Proprietà> Biblioteche utilizzando il: pulsante Aggiungi JAR/cartella.

ho messo la seguente riga di codice nel mio programma:

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

Al che ottengo in uscita correttamente come:

/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64: 

Tuttavia, continua a non riuscire a correre con lo stesso errore .

Ho installato IntelliJ IDEA Community edition e senza modifiche e il codice funziona senza problemi. Desidero davvero restare con Netbeans e vorrei capire il problema. Qualche idea?

IntelliJ ha la seguente caricato:

/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java 
-Didea.launcher.port=7532 
-Didea.launcher.bin.path=/home/code/idea-IC-143.1821.5/bin 
-Dfile.encoding=UTF-8 
-classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar 
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar 

:/home/code/NetBeansProjects/CO2model/out/production/TestModelABC 
:/home/code/NetBeansProjects/CO2model/TestModelABC/dist/lib/co2model.jar 
:/home/code/NetBeansProjects/CO2model/TestModelABC/dist/lib/javabuilder.jar 
:/home/code/NetBeansProjects/CO2model/for_redistribution_files_only/co2model.jar 
:/home/code/idea-IC-143.1821.5/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain test.Startup 
. 
: 
:/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64 
:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64 
:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64 
: 
:/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni 
:/lib/x86_64-linux-gnu 
:/usr/lib/x86_64-linux-gnu 
:/usr/lib/jni 
:/lib 
:/usr/lib 
+0

Un'ipotesi ... forse il tuo Netbeans non ha la variabile env 'LD_LIBRARY_PATH'? Provare a chiudere netbeans, quindi eseguire 'export LD_LIBRARY_PATH =/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:; netbeans e 'per riavviarlo. – heenenee

+0

Credo che l'impostazione 'java.library.path' non sia abbastanza, funziona quando si caricano librerie native immediate, ma fallisce quando queste librerie fanno riferimento ad altre loro librerie native. Dovresti anche impostare la variabile specifica del sistema operativo per trovare le librerie condivise ('PATH' su Windows,' LD_LIBRARY_PATH' su Linux e 'DYLD_LIBRARY_PATH' su Mac). – Amro

+0

Un'altra cosa da notare, i documenti raccomandano l'uso della stessa versione Java che MATLAB sta usando (1.7 non 1.8), sia runtime che JDK. È possibile verificare eseguendo il comando 'version -java' in MATLAB. – Amro

risposta

1

java.library.path è il percorso che Java utilizza per trovare librerie native .. Un errore potrebbe essere causato se

  • non esiste alcun file chiamato libmwmclmcrrt. quindi
  • Le autorizzazioni del file libmwmclmcrrt.so non sono corrette

Quindi il mio consiglio è di eseguire una ricerca con il nome libmwmclmcrrt.so di sapere se il file è nel sistema o no .. Se si potesse trovato manualmente copiare e incollare a questo percorso

/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64 

Se già presenti in quel percorso forse si potrebbe controllare i permessi dei file ..

nella maggior parte dei casi l'errore è causato perché la libreria non si trova ..

0

per impostare java.library.path in netbeans. Selezionare il progetto, fare clic con il tasto destro su Properties. Selezionare l'opzione Run, Modifica VM options per aggiungere la libreria nativa -Djava.library.path="absolute\path\to\your\library\files".

java.library.path option

dopo questo, è necessario caricare la libreria attraverso `System.load ("\ percorso assoluto \ a \ tuoi \ Libreria \ file");' nel blocco statico.

come questo

static { 
    try { 
    System.load("absolute\path\to\your\library\files"); 
    } catch (UnsatisfiedLinkError e) { 
    System.err.println("Native code library failed to load.\n" + e); 
    System.exit(1); 
    } 
} 

modificare anche la variabile d'ambiente LD_LIBRARY_PATH per includere il percorso in cui si trova la libreria MATLAB.

export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH 
0

Penso che abbiamo una spiegazione migliore here.

In breve:

  • proprietà Alcuni sistema viene letto solo una volta quando la JVM viene avviata, cambiando così dopo l'avvio non farà carico JVM di nuovo, in modo da System.setProperty() non funzionerà.
  • In particolare, java.library.path è di sola lettura.

Così, l'unico modo per impostare, è quello di impostare %PATH% in Windows, o $LD_LIBRARY_PATH in sistemi Linux-like.

Per impostarlo a livello di sistema in Linux, modificare /etc/environment. Se si desidera impostarlo solo a livello di utente, selezionare this very practical article.

LD_LIBRARY_PATH="/some/preset/path:/your/path/to/add" 

Inoltre: nel caso in cui tu non lo sai, un locate libmwmclmcrrt.so.9.0 è sempre molto utile in questa situazione, specialmente quando si può avere varie versioni di un file in una posizione diversa con nome identico. E /your/path/to/add è una directory.