क्या नेस्टेटिक लाइब्रेरी निर्भरताएँ संभव हैं?


12

मैं क्यूटी में काम कर रहा हूँ।

  1. क्या स्टैटिक लाइब्रेरी किसी अन्य स्टैटिक लाइब्रेरी पर निर्भर कर सकती है? (स्टेटिक लीब को किसी अन्य स्टैटिक लाइब से जोड़कर बनाया जाता है)
  2. यदि हाँ, तो क्या यह संभव है कि lib2 से लिंक करने के बाद, उत्पन्न lib (lib1) में lib2 के सभी कोड नहीं होंगे?

अपने क्यूटी प्रोजेक्ट में मैं एक स्टैटिक लाइब्रेरी का उपयोग कर रहा हूं, जो कई लाइब्रेरी पर निर्भर करता है। मुझे अपने कोड में सभी पुस्तकालयों (अपने सभी हेडर के साथ) को जोड़ना था, हालांकि मुझे अपने कोड में केवल एक ही लिबर (और उस वर्ग के एक .h) की आवश्यकता है।

कृपया परिदृश्य की व्याख्या करें।

जवाबों:


6

जब आप कुछ घोषित करते हैं तो आप बस वादा करते हैं कि लिंक करने के दौरान यह उपलब्ध होगा और विशिष्ट रूप से पहचाना जाएगा। मानक के बाहर एक प्रारूप में परिभाषाओं के लिए स्टेटिक लिबास कंटेनर से ज्यादा कुछ नहीं हैं। तो, इसके निम्नलिखित निहितार्थ हैं:

1) मैं नहीं है काफी आप यहाँ क्या पूछ रहे हैं मिलता है, लेकिन एक स्थिर पुस्तकालय बहुत ज्यादा एक और स्थिर पुस्तकालय पर निर्भर कर सकते हैं। या तो आप वादा करते हैं कि आपके निष्पादन योग्य के अंतिम लिंकिंग चरण (लिंक निर्भरता के रूप में प्रदान करके) के दौरान उस पुस्तकालय की परिभाषाएं उपलब्ध हैं। या आप स्थैतिक लिबास को जोड़ने के दौरान इसे "मर्ज" करते हैं।

2) इसके बाद इसका उत्तर यह हो जाता है कि केवल एक चीज जो आपको करने की जरूरत है वह है बस lib2 को लिंक करने के दौरान lib2 में लिंक न करना।

कुल मिलाकर मेरे अनुभव में सबसे अच्छा तरीका केवल लिबास को मर्ज करना है जो निजी हैं, यही कारण है कि अन्यथा ग्राहक बहु परिभाषित प्रतीकों के उल्लंघन में भाग लेंगे जब उनके प्रोजेक्ट के अन्य हिस्से आपके साथ निर्भरता साझा करते हैं।


इसका अर्थ है, एक स्थैतिक परिवाद जो एक अन्य स्थिर परिश्रम पर निर्भर करता है, लेकिन इसमें उस परिश्रम की लिंकिंग जानकारी शामिल है IS POSSIBLE.That का अर्थ है जब मुझे अपनी परियोजना में पहला परिवाद शामिल करने की आवश्यकता होती है, तो मैं दूसरे को भी शामिल करने के लिए बाध्य हूं। Bcoz, पहले lib में दूसरे lib के पूरे कोड नहीं हैं। क्या मैं सही हूं?
sk patra

6

इस पर मेरे त्वरित दो बिट्स: 10 (खेद भयानक मजाक)।

थोड़ा विस्तार करने के लिए, यहाँ जाता है:

1- एक स्थिर पुस्तकालय एक अन्य स्थिर पुस्तकालय, कुछ भी या एक गतिशील पुस्तकालय पर निर्भर नहीं कर सकता है: पहले दो उदाहरणों में नई एसटीएल लाइब्रेरी के लिए सभी कोड नए एसएलएल (स्टेटिक लिंक लाइब्रेरी) में शामिल किए जाएंगे, हालांकि, तीसरा विकल्प , बेअसर पर निर्भर करता है SLL निम्नलिखित परिणामों में से एक होने के लिए नेतृत्व कर सकता है,

  • इसमें डीएलएल (डायनेमिक लिंक लाइब्रेरी) से इकट्ठा किए गए कोड के स्थिर संस्करण आवश्यक होंगे।
  • या, बहुत अधिक बुरी तरह से, आपके पास एक स्थिर पुस्तकालय होगा जो एक परियोजना में शामिल होने पर एक DLL के साथ शिपिंग की आवश्यकता का कारण होगा, स्थैतिक लिंकिंग के पूरे बिंदु को तोड़ देगा।

तो अल्पावधि में, आप स्थैतिक पुस्तकालय को स्थैतिक पुस्तकालय से जोड़ सकते हैं

2- यदि lib1 और lib2 दोनों स्थिर हैं, और lib1 को lib2 के साथ जोड़ा गया है, तो lib2 की सभी कार्यक्षमता lib2 में शामिल होने की आवश्यकता के बिना उपलब्ध होगी, क्योंकि lib2 को lib1 के भीतर वैधानिक रूप से जोड़ा जाएगा (सोचें रूसी गुड़िया, lib2 के साथ छोटा होना)।

आपके द्वारा वर्णित परिदृश्य में उन प्रत्येक फ़ाइलों में उपलब्ध असतत कार्यक्षमता होनी चाहिए, जिन्हें आप शामिल करना चाहते हैं, जो कि वैधानिक रूप से जुड़ी हुई नहीं हैं, इसलिए कई फ़ाइलों की आवश्यकता है, अन्यथा आपके पास शामिल करने के लिए एक ही फ़ाइल होगी और आप ठीक होंगे।

निम्नलिखित को लें: 6 स्टेटिकली लिंक्ड लाइब्रेरियों के संदर्भ में एक .h फाइल: आपको पूर्ण कार्यक्षमता प्राप्त करने के लिए अपनी परियोजना में 7 फाइलें शामिल करने की आवश्यकता होगी

समावेश उदाहरण 1

एक SLL जो कहा गया है ।h फ़ाइल से संकलन के लिए लिंक करने के लिए केवल नए SLL को शामिल करने की आवश्यकता होगी:

समावेशन उदाहरण 2

आशा है कि यह मदद करता है और मैं समझ गया हूं कि आप क्या पूछ रहे थे।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.