2013-11-26 4 views
11

मैं पुस्तकालय को जोड़ने और उदारीकरण फ़ाइलों के बारे में एक सवाल है ...कुछ डीएलएल फ़ाइलों को जोड़ने के लिए अतिरिक्त .lib फ़ाइल क्यों चाहिए? =</p> <ul> <li>ओएस = विंडोज</li> <li>आईडीई क्यूटी</li> </ul> <p>मैं एक बनाया है:

इस

संदर्भ है डीएलएल: MyLib.dll।
मेरी क्यूटी परियोजना में है कि लाइब्रेरी का उपयोग करने के लिए, मैं सिर्फ राशि शामिल करने के लिए एक रास्ता है, पुस्तकालय के लिए लिंक शामिल और हेडर फाइल का उपयोग करें:

LIBS += "C:\myPath\MyLib.dll" 
INCLUDEPATH += "C:\myPath" 
HEADERS += \ 
    ../myPath/MyLib_global.h \ 
    ../myPath/mylib.h 

मैं अपने प्रोजेक्ट में एक तीसरी पार्टी dll उपयोग कर रहा हूँ: तीसरे .dll
अगर मैं ऊपर के उदाहरण में के रूप में ही करते हैं, यह काम नहीं करता:

LIBS += "C:\myPath\third.dll" 

तृतीय पक्ष DLL एक उदारीकरण फ़ाइल "third.lib" है, जो मैं जाहिरा तौर पर एक साथ उपयोग करने की आवश्यकता के साथ आता है डीएलएल के साथ।

वह क्यों है? कुछ डीएलएल पुस्तकालयों को .lib फ़ाइल की आवश्यकता क्यों है लेकिन अन्य डीएलएल पुस्तकालयों में नहीं है?
क्या यह हो सकता है कि .lib डीएलएल तक पहुंचने वाली एक स्थिर पुस्तकालय है?

बहुत बहुत धन्यवाद!

उत्तर

4

lib फ़ाइल एक आयात लाइब्रेरी फ़ाइल है, जो अंतिम निष्पादन योग्य को एक आयात पता तालिका (आईएटी) रखने की अनुमति देती है जिसके द्वारा सभी डीएलएल फ़ंक्शन कॉल का संदर्भ दिया जाता है। असल में, कार्यों को देखने की इजाजत दी गई।

आप इसके बारे में here पढ़ सकते हैं।

CONFIG+= staticlib 

Here's कैसे पुस्तकालयों बनाने के लिए पर कुछ प्रलेखन -:

क्यूटी lib उत्पन्न करने के लिए, .pro में जोड़ना।

+0

धन्यवाद @ Merlin069 आपके उत्तर के लिए। यह स्पष्ट करता है! एक बात: जब मैंने myLib.dll बनाया, तो मुझे DLL फ़ाइल के साथ lib फ़ाइल उत्पन्न करने का कोई तरीका नहीं दिखाई दिया। क्या डीएलएल का निर्माण करते समय विकल्प पर है? साथ ही, मेरे डीएलएल में सभी फ़ंक्शन कॉल भी lib फ़ाइल के बिना पहुंच योग्य प्रतीत होते हैं। क्या यह नहीं है कि .lib फ़ाइल को अनुमति देने की अनुमति है? धन्यवाद – WewillSee

+0

डिफ़ॉल्ट रूप से एक आयात पुस्तकालय होना चाहिए। – ExpatEgghead

+0

lib फ़ाइल बनाने के लिए आपके आईडीई में एक सेटिंग होने की संभावना है, अगर यह पहले से ही उत्पन्न नहीं कर रहा है। जहां तक ​​मैं इसे समझता हूं, lib फ़ाइल के बिना, आप अलग-अलग डीएल लोड कर सकते हैं और कार्यों को कॉल कर सकते हैं, लेकिन यदि आप स्थिर पुस्तकालयों के साथ निष्पादन योग्य बनाना चाहते हैं तो lib की आवश्यकता होती है। – TheDarkKnight

3

मेरा उत्तर संदर्भ के लिए विशिष्ट नहीं हो सकता है लेकिन अधिकांश डेवलपर्स के लिए एक ही प्रश्न पूछने के लिए उपयोगी होगा। इस एंथनी विलियम्स द्वारा उत्तर दिया गया

What is inside .lib file of Static library, Statically linked dynamic library and dynamically linked dynamic library?

आप एक गतिशील पुस्तकालय का उपयोग करने के लिए एक उदारीकरण फ़ाइल की जरूरत नहीं है, लेकिन एक बिना आप अपने कोड में सामान्य कार्यों के रूप में DLL से कार्यों का इलाज नहीं कर सकते । इसके बजाय आपको DLL (और फ्री लाइब्रेरी को पूरा होने पर लोड करने के लिए लोडLibrary को मैन्युअल रूप से कॉल करना होगा), और DLP में फ़ंक्शन या डेटा आइटम के पते को प्राप्त करने के लिए GetProcAddress को प्राप्त करना होगा। पर इसका उपयोग करने के लिए आपको लौटाया गया पता उचित पॉइंटर-टू-फ़ंक्शन पर डालना होगा।

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