2015-04-01 7 views
7

सबसे अच्छा विवरण मैं ढूँढने में सक्षम था आधिकारिक दस्तावेज से किया गया था:जीएनयू लिंकर में आंशिक लिंकिंग क्या है?

-r --relocateable पुनर्निधारणीय उत्पादन उत्पन्न - यानी, कोई आउटपुट फ़ाइल है कि बदले में ld को इनपुट के रूप में सेवा कर सकते हैं उत्पन्न करते हैं।। इसे अक्सर आंशिक लिंकिंग कहा जाता है। साइड इफेक्ट के रूप में, मानक यूनिक्स जादू संख्याओं का समर्थन करने वाले वातावरण में, यह विकल्प आउटपुट फ़ाइल के जादू संख्या को ओमैजिक में भी सेट करता है। यदि यह विकल्प निर्दिष्ट नहीं है, तो एक पूर्ण फ़ाइल का उत्पादन होता है। सी ++ प्रोग्राम को लिंक करते समय, यह विकल्प कन्स्ट्रक्टर के संदर्भ हल नहीं करेगा; ऐसा करने के लिए, उपयोग करें- यूआर। यह विकल्प वही चीज़ है जो '-i' है।

मुझे विशेष रूप से यह जानने में दिलचस्पी है कि लिंकर के इनपुट में मौजूद प्रतीकों के साथ क्या होता है। जब मेरे पास स्थिर लाइब्रेरी libstatic.a है जिसमें एक ऑब्जेक्ट फ़ाइल घटक.o है, तो एक विशिष्ट केस लें। अब, मैं एक और स्थैतिक पुस्तकालय libfinal.a बनाना चाहता हूं जो libstatic.a पर एक इंटरफेस के रूप में काम करेगा। मैं इसे बनाने के लिए इस आदेश का उपयोग करें:

ld -r -o libfinal.a wrapper.o -L. -lstatic

कहाँ wrapper.o कार्यों libstatic.a में परिभाषित

libfinal.a सिर्फ एक जोड़ा जाएगा कॉल करने के लिए विशेष एपीआई प्रदान करता है संग्रह wrapper.o और component.o या सभी संदर्भों को जो के बीच wrapper.o और component.o कर सकते हैं होने वाली संकल्प लिया होने हल किया जा सकता है (लिंकिंग) और फिर libfinal.a में रखा गया है?

Edit_1: सवाल बना प्रगति के आधार पर अद्यतन कर रहा है: objdump घटक पुस्तकालय libstatic.a (objdump -D libstatic.a) की.text वर्गों अलग से प्रत्येक कार्य के लिए (उम्मीद के रूप में) को दर्शाता है। जबकि संयुक्त पुस्तकालय libfinal.a में, जिसे आंशिक लिंकिंग (-r ध्वज) द्वारा बनाया गया है, वहां केवल एक एकल .text अनुभाग है। मुझे लगता है कि इसका मतलब है कि एक आंतरिक लिंकिंग हुई है और यह सिर्फ एक सादा संग्रह नहीं बना रहा है।

उत्तर

1

ld निष्पादन योग्य और साझा पुस्तकालय बनाता है, फ़ाइल संग्रह (.a फ़ाइलें) ऑब्जेक्ट नहीं करता है।

ar ऑब्जेक्ट फ़ाइल अभिलेखागार बनाता है और संशोधित करता है। जब आप कुछ (अनसुलझे) एक .so के प्रतीकों को हल करने और एक और .so निर्माण करने के लिए चाहते हैं


-r, --relocateable विकल्प उपयोगी है।

+2

ऐसा लगता है कि '-r' ध्वज आंशिक-लिंकिंग के लिए भी उपयोग किया जा सकता है। प्रश्न में कृपया मेरा ** संपादन_1 ** देखें। सत्यापन के लिए, मैं अपने आवेदन के साथ '-r' ध्वज का उपयोग कर बनाई गई अंतिम-लाइब्रेरी को लिंक करने में सक्षम हूं। – govind

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