कम से कम लिनक्स और सोलारिस पर, स्थिर पुस्तकालय वास्तव में संकलित का एक समूह हैं। इसलिए एक बड़ी फ़ाइल में फेंक दिया गया है। एक स्थिर पुस्तकालय संकलित करते समय, आमतौर पर -फिक ध्वज ओमेटेड होता है, इसलिए जेनरेट कोड स्थिति निर्भर होता है।एक स्थिर लाइब्रेरी के खिलाफ साझा लाइब्रेरी को जोड़ना: क्या एक क्लासिक लाइब्रेरी को अलग-अलग संकलित किया जाना चाहिए यदि कोई एप्लिकेशन इसे लिंक कर रहा हो?
अब कहें कि मेरी स्थिर लाइब्रेरी बी है। मैंने इसे बनाया है और परिणामी .a फ़ाइल है जो वास्तव में सभी स्थिति निर्भर हैं .o फाइलों का सिर्फ एक ग्लोब है। अब मेरे पास एक साझा लाइब्रेरी है जिसे मैं बनाना चाहता हूं, ए, और मैं इसे स्थिर रूप से लिंक करना चाहता हूं। जब मैं ए बनाता हूं, स्वाभाविक रूप से मैं जेनरेट कोड स्थिति स्वतंत्र बनाने के लिए -फिक ध्वज का उपयोग करूंगा। लेकिन अगर मैं बी के खिलाफ लिंक करता हूं, तो क्या मैं निर्भर स्थिति को मिश्रित नहीं कर सकता हूं और स्वतंत्र ऑब्जेक्ट फाइलों को स्थिति में रख सकता हूं?
मुझे बहुत से टेक्स्ट रिलायंस त्रुटियां मिल रही हैं जब तक कि मैं -मिंपूर-टेक्स्ट भी निर्दिष्ट नहीं करता, और मुझे लगता है कि यह शायद कारण हो। ऐसा लगता है कि जब मैं एक लाइब्रेरी संकलित करता हूं, तो मुझे इसे बार, एक साझा संस्करण, एक स्थिर संस्करण, और एक स्थैतिक-का-उपयोग-द्वारा-साझा-साझा-libs संस्करण संकलित करने की आवश्यकता है। क्या मैं सही हू? मैं बस-मिंपर-टेक्स्ट का उपयोग कर सकता हूं लेकिन जी ++ मैन पेज कहता है कि यदि आप ऐसा करते हैं तो ऑब्जेक्ट वास्तव में साझा नहीं हो रहा है (यह अस्पष्ट है कि यह सभी बिना साझा किए गए हैं या केवल स्थिर रूप से जुड़े हुए हिस्सों हैं, क्या किसी को पता है?) ।
प्रश्न सही ढंग से कहा गया है, वह पहले पैराग्राफ में '-फिक' छोड़ देता है, जिससे स्थिति-निर्भर कोड होता है, फिर इसे दूसरे पैराग्राफ में उपयोग किया जाता है, जिससे स्थिति-स्वतंत्र कोड होता है। –