2016-02-12 10 views
14

मैं बस पर मैटलैब रनटाइम स्थापित किया है:java.library.path, classpath Netbeans 8.0.2

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

आप स्थापित R2015b (9.0) * (MATLAB क्रम में मेरे मामले में मैटलैब क्रम here पा सकते हैं 9.0, आर2015 बी के लिए, MATLAB 8.6 के साथ काम करने का इरादा है, जो आर2015 बी भी है)।/Usr/स्थानीय/MATLAB

मैं 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) 

त्रुटि मैं उतरना मेरे कार्यक्रम इस प्रकार है उपयोग कर रहा हूँ:

मैटलैब पुस्तकालयों के लिए स्थापित करने के

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. 

मैटलैब के स्थापित होने पर यह कहता है:

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: 

मैं प्रोजेक्ट इस लाइन को शामिल किया है> गुण> वी एम विकल्प:

-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:" 

और मैं एक ही फ़ोल्डरों को प्रोजेक्ट में शामिल किया है> गुण> पुस्तकालय का उपयोग कर: जार/फ़ोल्डर बटन जोड़ें।

मैं अपने कार्यक्रम में निम्न कोड पंक्ति डाल दिया है:

System.out.println(System.getProperty("java.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: 

हालांकि, यह एक ही त्रुटि के साथ चलाने के लिए असफल करने के लिए जारी ।

मैंने इंटेलिजे आईडीईए सामुदायिक संस्करण स्थापित किया और बिना किसी मोड के और कोड किसी भी मुद्दे के बिना चलाता है। मैं वास्तव में नेटबींस के साथ रहना चाहता हूं और इस मुद्दे को समझना चाहता हूं। कोई विचार?

इंटेलीजे लोड निम्नलिखित है:

/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

अनुमान लगाया गया है ... शायद आपके नेटबीन्स में 'LD_LIBRARY_PATH' env चर नहीं है? Netbeans बंद करने का प्रयास करें, फिर 'निर्यात 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 और 'इसे पुनरारंभ करने के लिए। – heenenee

+0

मेरा मानना ​​है कि 'java.library.path'' सेट करना पर्याप्त नहीं है, यह तत्काल देशी पुस्तकालयों को लोड करते समय काम करता है, लेकिन विफल रहता है जब उन पुस्तकालयों में स्वयं के अन्य मूल पुस्तकालयों का संदर्भ दिया जाता है। आपको साझा पुस्तकालयों (विंडोज़ पर 'पथ', लिनक्स पर 'एलडी_LIBRARY_PATH' और मैक पर' DYLD_LIBRARY_PATH') खोजने के लिए ओएस-विशिष्ट चर सेट भी करना चाहिए। – Amro

+0

ध्यान देने योग्य एक और बात, दस्तावेज़ उसी जावा संस्करण का उपयोग करने की अनुशंसा करते हैं जो MATLAB (1.7 नहीं 1.8), रनटाइम और जेडीके दोनों का उपयोग कर रहा है। आप MATLAB के अंदर 'version -java' कमांड चलाकर जांच सकते हैं। – Amro

उत्तर

1

java.library.path पथ जावा देशी पुस्तकालयों को खोजने के लिए उपयोग करता है .. कोई त्रुटि के कारण हो जाएगा अगर

  • libmwmclmcrrt कहा जाता है कोई फाइल नहीं है है। पथ
  • फ़ाइल की अनुमति libmwmclmcrrt.so सही नहीं है

तो मेरी सलाह जानना आवश्यक है कि फ़ाइल या नहीं .. सिस्टम में है नाम libmwmclmcrrt.so के साथ एक खोज चलाने के लिए होगा पाया आप सकता है मैन्युअल रूप से इसे इस पथ

/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 
को कॉपी-पेस्ट

कि रास्ते में पहले से ही मौजूद हो सकता है आप फाइल अनुमति जाँच कर सकता है ..

मामलों क्योंकि पुस्तकालय नहीं मिला है त्रुटि के कारण होता है से अधिकांश में ..

0

netbeans में java.library.path सेट करने के लिए। प्रोजेक्ट का चयन करें, Properties पर राइट क्लिक करें। Run विकल्प का चयन करें, मूल पुस्तकालय -Djava.library.path="absolute\path\to\your\library\files" जोड़ने के लिए VM options बदलें।

java.library.path option

इस के बाद, आप ("\ अपने \ पुस्तकालय \ फ़ाइलों के लिए पूर्ण \ पथ \") `System.load के माध्यम से पुस्तकालय लोड करने के लिए की जरूरत है; ' स्थिर ब्लॉक में।

इस

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); 
    } 
} 

की तरह भी पथ जहाँ matlab पुस्तकालय स्थित है शामिल करने के लिए LD_LIBRARY_PATH वातावरण चर को संशोधित।

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

मुझे लगता है कि हम एक बेहतर स्पष्टीकरण here है।

संक्षेप में: जब JVM शुरू है, इस प्रकार बदल रहा है यह बाद शुरू हुआ JVM लोड इसे फिर से है, तो System.setProperty() काम नहीं करेगा नहीं होगा

  • कुछ सिस्टम संपत्ति केवल एक बार पढ़ा जाता है।
  • विशेष रूप से, java.library.path केवल पढ़ने के लिए है।

इसलिए, यह निर्धारित करने के लिए एक ही रास्ता, Windows में %PATH%, या $LD_LIBRARY_PATH लिनक्स सिस्टम की तरह में स्थापित करने के लिए है।

इसे लिनक्स में सिस्टम-व्यापी सेट करने के लिए, /etc/environment संपादित करें। यदि आप इसे केवल उपयोगकर्ता-व्यापी सेट करना चाहते हैं, तो this very practical article देखें।

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

प्लस: मामला है कि आप यह पता नहीं है, एक locate libmwmclmcrrt.so.9.0 हमेशा इस स्थिति में बहुत उपयोगी है, तो आप समान नाम के साथ अलग स्थान में एक फ़ाइल के विभिन्न संस्करण हो सकता है खास तौर पर जब। और /your/path/to/add एक निर्देशिका है।