का उपयोग कर स्थिर पुस्तकालय को जोड़ने का सही तरीका यह क्यों है कि कुछ स्थिर पुस्तकालय (lib * .a) को उसी तरह से जोड़ा जा सकता है जैसे साझा पुस्तकालय (lib * .so) जुड़े हुए हैं (ld -l स्विच), लेकिन कुछ नहीं कर सकते?जीसीसी
मुझे हमेशा सिखाया गया था कि सभी पुस्तकालयों, स्थैतिक या नहीं, को -l से जोड़ा जा सकता है ... हालांकि, मैं अब तक एक पुस्तकालय में चला गया हूं (जीएलएफडब्लू), जो कुछ भी नहीं करता है लेकिन "अपरिभाषित संदर्भ" लिंक त्रुटियों अगर मैं इसे इस तरह से जोड़ने का प्रयास करता हूं।
this question पर प्रतिक्रिया के अनुसार, स्थैतिक पुस्तकालयों को जोड़ने का "उचित" तरीका उन्हें -l का उपयोग करने के बजाय, सीधे अपनी ऑब्जेक्ट फ़ाइलों के साथ शामिल करना है। और, जीएलएफडब्ल्यू पुस्तकालय के मामले में, यह निश्चित रूप से इस मुद्दे को हल करता है। लेकिन एलएल के साथ जुड़े हुए हर दूसरे स्थैतिक पुस्तकालय का उपयोग मैं ठीक काम करता हूं।
तो:
- क्या जब बजाय जुड़ा हुआ सीधे शामिल काम नहीं करने के लिए यह एक पुस्तकालय का कारण बन सकता है? अगर मुझे कारण पता था, तो शायद मैं इस मुद्दे को ठीक करने के लिए लाइब्रेरी को संपादित और पुन: संकलित कर सकता हूं।
- क्या यह सच है कि आपको साझा पुस्तकालयों को लिंक करने के समान ही स्थिर पुस्तकालयों को लिंक नहीं करना चाहिए? (और यदि नहीं, तो क्यों नहीं?)
- क्या लिंकर अभी भी आउटपुट निष्पादन योग्य से अप्रयुक्त लाइब्रेरी फ़ंक्शंस को समाप्त करने में सक्षम है जब लाइब्रेरी सीधे इस तरह से शामिल है?
हां, संबंधित पुस्तकालय से पहले, प्रत्येक पुस्तकालय के पथ -एल का उपयोग करके प्रदान किए जाते हैं। जीसीसी पुस्तकालय पा सकता है, लेकिन पुस्तकालय के भीतर से बड़ी संख्या में अपरिभाषित संदर्भ त्रुटियों को देता है। – Nairou