2014-11-23 7 views
11

मेरे मैक पर कोड का एक टुकड़ा बनाने में कुछ समस्याएं चल रहा है। क्या कोई मुझे एक छवि विश्लेषण जावा ऐप लिखता था लेकिन नेटबीन्स पर इसे चलाने की कोशिश करते समय मुझे यह त्रुटि मिलती रही।असंतुष्ट लिंक्स त्रुटि: java.library.path में कोई opencv_java249

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)

नेटबीन प्रोजेक्ट है, और आवश्यक जार फ़ाइलों को पुस्तकालयों के रूप में जोड़ा गया है। प्रोग्रामर ने मुझे सही ओपनसीवी संस्करण डाउनलोड करने और openvv.dll फ़ाइल को अपने जावा/जेआर/बिन फ़ोल्डर में कॉपी करने के लिए कहा। लेकिन मुझे डीएलएल फाइल या जावा/जेआर फ़ोल्डर नहीं मिल रहा है। मुझे पता है कि अधिकांश प्रोग्रामिंग एक कारण के लिए विंडोज़ पर होती है। उम्मीद है कि कोई मुझे इस मुद्दे को हल करने में मदद कर सकता है और इस मैक को मेरे मैक पर चला सकता है।

यहाँ कोड के पहले भाग, भाग जाता है कि संभवत: त्रुटि बनाने है:

/* 
* 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); 

क्षमा अगर यह नहीं है कि स्पष्ट है, मुझे क्या कोई जानकारी जोड़ने की पता है अगर कुछ याद आ रही है या नहीं स्पष्ट। वास्तव में आप जो भी मदद दे सकते हैं उसकी सराहना करेंगे। निष्ठा से मीर Warcel

+0

चेक इस विधि का उपयोग कैसे करने के लिए सेटअप JNI – SJuan76

+0

में देशी पुस्तकालयों के लिए पथ तो तुम मैक या प्राप्त करने के लिए फिर कंपाइल पुस्तकालय इस्तेमाल करने की कोशिश की थी मैक संस्करण, और यदि हां, तो क्या यह आपके लिए काम करता है? –

उत्तर

1

अपवाद कोड की रेखा से नीचे से उत्पन्न हो रही है:

System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 

आपका कार्यक्रम loadLibrary विधि है, जो यह करने में सक्षम नहीं है करने के लिए कॉल में तर्क के नाम से एक देशी पुस्तकालय लोड करने के लिए कोशिश कर रहा है खोजें। सुनिश्चित करें कि मूल पुस्तकालय (opencv.dll) java.library.path सिस्टम प्रॉपर्टी में मौजूद स्थानों में से एक पर रखा गया है क्योंकि JVM किसी भी मूल पुस्तकालय को लोड करने के लिए इन स्थानों को देखता है (जिसमें 'जावा/जेरे/बिन' नहीं हो सकता है)।

आप नीचे दिए गए की तरह अपने कार्यक्रम में java.library.path मुद्रित कर सकते हैं:

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

मुझे लगता है कि आप इस बिंदु को याद कर रहे हैं कि मीर मैक पर अपना कोड चलाते समय विंडोज लाइब्रेरी ('.dll' फ़ाइल) से लिंक करने का प्रयास कर रहा है। –

+0

@striving_coder ओह..हाँ! यह मैक पर .dll के साथ काम नहीं करेगा। मेर के लिए मेर पुस्तकालय प्राप्त करने की जरूरत है। – sjain

1

आप न सिर्फ मैक पर विंडोज पुस्तकालय (dll फ़ाइल) डाल सकते हैं और यह चल रहा है - आप पहली मैक के लिए पुस्तकालय संकलन करने की जरूरत है (या प्राप्त पुस्तकालय का मैक संस्करण)।

कृपया इसे कैसे करना है पर सुझाव के लिए यहाँ देखें:

.dll Equivalent on Mac OS X

How do third-party libraries work in Objective-C and Xcode?

How to use a Windows DLL with Java in Mac OS X?

0

बस रास्ते में फ़ोल्डर जोड़ने के लिए जहाँ आपके opencv_java249.dll है; यह आपके मशीन आर्किटेक्चर के आधार पर C:\bin\opencv\build\java\x32 या C:\bin\opencv\build\java\x64 जैसा कुछ होगा। समस्या यह है कि java.library.path वास्तव में path चर है।

6

मैक चल रहे ओएसएक्स योसेमेट पर, मैंने libopencv_java2412.dylib फ़ाइल को /Library/Java/Extensions में गिरा दिया और यह काम किया।

ओपनसीवी बनाने के बाद, libopencv_java2412.dylib/build/lib में उत्पन्न होता है।

+0

ब्रावो! एल कैपिटन पर भी काम करता है। – danielhadar

+0

सिएरा पर भी। – Spindizzy

15

अपनी ओपनसीवी निर्देशिका में देखें;

उदाहरण के लिए; (brew install opencv3 --with-java --with-python3 का उपयोग करके स्थापित)

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

आप देखेंगे;

libopencv_javaXXX.so opencv-XXX.jar 

अब आप पहले से ही जावा (libopencv_javaXXX.so) आप के साथ संकलित, केवल एक चीज छोड़ दिया है के लिए OpenCV के देशी पुस्तकालय, मैक के गतिशील पुस्तकालय है।

लिंक libopencv_javaXXX.so से libopencv_javaXXX.dylib;

ln -s libopencv_javaXXX.so libopencv_javaXXX.dylib 

अब या इंटेलीजे में /usr/local/Cellar/opencv3/XXX/share/OpenCV/javaके रूप में मूल निवासी लाइब्रेरी स्थान जोड़ने ग्रहण में कुछ इसी तरह।

या इसे अपने जेवीएम तर्कों में जोड़ें;

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

इससे बहुत मदद मिली !!!! दिलचस्प है कि लिंक्ड लाइब्रेरीज़ में एक छोटी सी चाल कैसे लाती है – iGbanam

+0

'-Djava.library.path = 'जाने का तरीका है: आपको ओपनसीवी के विभिन्न संस्करणों को संकलित करने के लिए और अधिक लचीलापन देता है और चुनें कि कौन से चलना है, उदा। प्रदर्शन की तुलना करने के लिए। – WillC

-1

netebans सही klick परियोजना chosew properti चलाने चुना, काम direktory,, opencv फ़ोल्डर, रिहाई/lib के लिए ब्राउज़र परिवर्तन क्लिक

2

StackOverflow से समय की एक बहुत अलग सुझाव खर्च, और इस्तेमाल करने के बाद मैं कामयाब खिड़कियों के लिए समाधान प्राप्त करने के लिए। लेकिन मैं मैक के लिए भी एक समाधान जोड़ रहा हूँ। उम्मीद है कि यह काम करना चाहिए।

  1. अपने सिस्टम कॉन्फ़िगरेशन के अनुसार अपना lib लोड करें।

    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 के रूप में अपने जरूरत के अनुसार

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

यह उत्तर प्रश्न का उत्तर नहीं देता है, जो कि विंडोज के बारे में नहीं है, बल्कि मैक के बारे में है। साथ ही, कृपया बताएं कि आपका कोड क्या करता है और क्यों और किस तरह से यह समस्या हल करता है। –

संबंधित मुद्दे

 संबंधित मुद्दे