2011-10-20 9 views
11

कहें कि मेरे पास libA है। यह उदाहरण के लिए libs कुछ सरल तथ्य के लिए निर्भर करता है कि libA की एक गैर इनलाइन विधि libSomething.h में किसी विधि को कॉल करती है। इस मामले में निर्भरता कैसे जुड़ती है? क्या libA को स्थिर रूप से libs से लिंक करना होता है, जब इसे संकलित किया जाता है, या libA का उपयोगकर्ता (libA का उपयोग करने वाला कोई एप्लिकेशन) को libA और libsomething दोनों से लिंक करने की आवश्यकता होती है?स्थैतिक पुस्तकालय निर्भरताओं से कैसे जुड़ते हैं?

धन्यवाद

उत्तर

14

स्टेटिक जोड़ने बस जिसके परिणामस्वरूप निष्पादन में पूरी आइटम (काम करता है, स्थिरांक, आदि) को कॉपी कर रहा है। यदि किसी स्थिर लाइब्रेरी के कोड में कुछ साझा लाइब्रेरी आइटमों के संदर्भ शामिल हैं, तो ये संदर्भ परिणामस्वरूप निष्पादन योग्य में निर्भरता बन जाएंगे। यदि आप निष्पादन योग्य के बजाय लाइब्रेरी को लिंक करते हैं तो वही है।

This thread चर्चा करता है कि यह लिनक्स में कैसा होता है।

+0

यदि मैं नहीं चाहता कि परिणामस्वरूप निष्पादन योग्य बोझ हो, तो मैं क्या कर सकता हूं? – jmasterx

+1

@ मिलो: आप libSomthing की निर्भरताओं के स्थिर पुस्तकालयों को libA में लिंक कर सकते हैं। –

+0

@ मिलो: यानी आप कोई साझा निर्भरता नहीं चाहते हैं? तो आपको केवल स्थिर पुस्तकालयों का उपयोग करके, सबकुछ स्थिर रूप से लिंक करना होगा। इसका परिणाम किसी भी निर्भरता के साथ एक बड़ा आत्मनिर्भर निष्पादन योग्य होगा। लेकिन चेतावनी दी जानी चाहिए, कुछ पुस्तकालयों को स्थैतिक लोगों के रूप में बनाना मुश्किल है। – vines

4

निर्माण प्रक्रिया के दौरान संकलक कोड को एक अस्थायी प्रारूप में अनुवाद करता है, चलिए इसे ऑब्जेक्ट फ़ाइल कहते हैं। ऑब्जेक्ट फ़ाइल में, प्रतीकों की एक सूची है जो संकलक हल नहीं कर सका, आमतौर पर अन्यत्र परिभाषाएं। लिंकिंग चरण इन प्रतीकों को हल करने का प्रभारी है।

निर्माण प्रक्रिया लिंकर को फ़ाइलों को तब तक फ़ीड करती है जब तक कि सभी प्रतीकों का समाधान नहीं हो जाता। कोई भौतिक निर्भरता सूचियां नहीं हैं, केवल हल करने के लिए प्रतीकों की सूचियां हैं। यह विभिन्न पुस्तकालयों का उपयोग करके प्रतीकों को हल करने की अनुमति देता है। उदाहरण के लिए, कोई Windows विशिष्ट समस्याओं के लिए Windows लाइब्रेरी का उपयोग करना चाह सकता है; लिनक्स विशिष्ट मुद्दों के लिए एक लिनक्स लाइब्रेरी। यह स्पष्ट रूप से यह नहीं बताता है कि एक प्रोग्राम विंडोज पुस्तकालय पर निर्भर है; यह लिनक्स पर भी निर्भर हो सकता है।

कुछ कंपाइलर आमतौर पर निर्माण प्रक्रिया में उपयोग के लिए निर्भरता सूचियां उत्पन्न कर सकते हैं। हालांकि, अंतिम जिम्मेदारी प्रोग्रामर तक है।

6

संग्रहित संकलन करते समय, एक स्थिर पुस्तकालय अनलिंक बाइनरी ऑब्जेक्ट फ़ाइलों (* .o या * .obj) का एक साधारण संग्रह है, निर्भरता के लिए कोई जांच नहीं की जाती है। जब किसी ने किसी के बाइनरी निष्पादन योग्य (या साझा लाइब्रेरी/डीएलएल) को लिंक किया है तो लिंकर सभी आवश्यक निर्भरताओं के लिए जांच करता है और केवल तभी आपको किसी भी मुद्दे पर सतर्क कर देगा।

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