c++ - दृश्य स्टूडियो में स्थिर और गतिशील लिंकिंग



opencv visual-studio-2012 (1)

मैं स्थिर और गतिशील लिंकिंग की अवधारणा को समझता हूं यह ज्ञात है कि विंडोज प्लेटफॉर्म पर,। .dll गतिशील पुस्तकालय हैं और .lib स्थिर पुस्तकालय हैं

मेरी भ्रम: मैंने एक परियोजना बनाई जिसमें मुझे ओपनसीवी पुस्तकालयों का उपयोग करना पड़ा। असल में, मुझे ओपनसीवी के निम्नलिखित 5 पुस्तकालयों का उपयोग करना था:

-lopencv_core
-lopencv_highgui
-lopencv_imgcodecs
-lopencv_imgproc
-lopencv_videoio

इस प्रयोजन के लिए, प्रोजेक्ट के गुणों में, मुझे कंप्रेसर को वीएस 2012 की Additional Library Directory में पुस्तकालयों का मार्ग बताया गया था और मुझे .lib लाइब्रेरी के बारे में बताना था जो कि मैं परियोजना के लिए उपयोग करना चाहता हूं। । इस परियोजना को बिना किसी त्रुटि के संकलित किया गया लेकिन जब मैं इस परियोजना को चलाने की कोशिश करता हूं, तो उसने कहा कि videoio.dll गायब है (बाकी के पुस्तकालयों के लिए भी यही त्रुटि है)। जैसे ही मैंने उस फ़ोल्डर के अंदर .dll फ़ाइलों की प्रतिलिपि बनाई, जहां। .exe मौजूद था, परियोजना ठीक .exe थी

प्रश्न: जब मैंने पहले से ही स्थैतिक पुस्तकालयों ( .lib ) से लिंक किया था, तो मुझे .dll फ़ाइलों की प्रतिलिपि क्यों करनी थी?

आगे प्रश्न: जब मैं मैक ओएस या लिनक्स पर एक्लिप्स का उपयोग करता हूं, मुझे केवल उस शिकायत को बताना होगा जहां ओपनसीवी पुस्तकालय मौजूद हैं और लिंकर को जो कि अन्य ओपनसीवी पुस्तकालयों का उपयोग करना चाहते हैं। उस परिस्थिति में मुझे कभी भी गतिशील पुस्तकालयों को .exe फ़ोल्डर में रखना नहीं पड़ा।


"सामान्य" विंडो टूल चेन .lib के दो "स्वाद" प्रदान करते हैं।

एक आप उल्लेख स्थिर पुस्तकालयों है जब इस्तेमाल किया जाता है, तो कोई भी संबद्ध नहीं है। Dll

दूसरी एक छिपी हुई लाइब्रेरी है जो लोड करने के लिए डायनेमिक पुस्तकालय के लिए फोकस पॉइंटर्स लोड करने और फिक्स करने के लिए कोड में हुक करने के लिए है।

गतिशील पुस्तकालयों (.dll) के साथ आप या तो इसे स्वयं लोड कर सकते हैं ( LoadLibrary माध्यम से) या आप स्टब (आयात) का उपयोग कर सकते हैं। Lib आपको .dll के साथ प्रदान किया गया है यदि कोई उपलब्ध कराया जाता है तो आयात।

जब मैंने पहले से ही स्थैतिक पुस्तकालयों (.lib) से लिंक किया था, तो मुझे .dll फ़ाइलों की प्रतिलिपि क्यों करनी थी?

.DLL को पथ में या उस निर्देशिका को खोजने के लिए लोडर के लिए .exe के साथ निर्देशिका में होना चाहिए।

मैं कैसे अंतर कर सकता हूं कि .lib फ़ाइल स्थैतिक पुस्तकालय या डायनेमिक लाइब्रेरी है?

आम तौर पर दस्तावेज़ीकरण में इस बारे में कुछ स्तर का विवरण शामिल होना चाहिए। अगर वे एक ही फ़ोल्डर में चले गए हैं, तो मुझे लगता है कि .lib। Dll से जुड़ा हुआ है। अगर सब कुछ विफल रहता है, तो फ़ाइल आकार को देखो; अगर .lib .dll से जुड़ा हुआ है, तो यह आमतौर पर .dll की तुलना में छोटा है





dll