जवाबों:
एक .a
फाइल एक स्टैटिक लाइब्रेरी है, जबकि एक .so
फाइल विंडोज पर DLL के समान एक साझा ऑब्जेक्ट (डायनामिक) लाइब्रेरी है। इस पृष्ठ पर दोनों के बीच अंतर के बारे में कुछ विस्तृत जानकारी है ।
.a
केवल संकलन के दौरान एक कार्यक्रम के भाग के रूप में शामिल किया जा सकता है। .so
एक कार्यक्रम लोड होने पर "आयात" किया जा सकता है।
ar
उपयोगिता का उपयोग करके बनाई गई ऑब्जेक्ट फ़ाइलों का एक संग्रह है । अधिक जानकारी यहाँ
अनुसरण के रूप में, .a फ़ाइल "ar" संग्रह है। टार संग्रह के विपरीत, यह .o या ऑब्जेक्ट फ़ाइलों को संग्रहीत करता है, जिससे उन्हें संग्रह से बाहर निकाला जा सकता है, और अन्य चीजों के बीच एक कार्यक्रम में जोड़ा जा सकता है। यदि आप चाहते हैं तो आप अन्य फ़ाइलों को संग्रहीत करने के लिए ar का उपयोग कर सकते हैं।
आप उदाहरण के लिए, -t पैरामीटर के साथ एक ar फ़ाइल के सदस्यों की एक सूची प्राप्त कर सकते हैं:
ar -t /usr/lib/libc.a
.So फ़ाइल एक "साझा ऑब्जेक्ट" फ़ाइल है, और इसमें लिंकर के लिए बहुत अधिक जानकारी उपलब्ध है ताकि सदस्यों को लोडिंग प्रोग्राम से जितनी जल्दी हो सके लिंक किया जा सके।
उदाहरण के लिए, कोशिश करें:
objdump -T /lib/libc-2.11.1.so
(या आपके / lib निर्देशिका में जो भी libc.so का संस्करण है।) ध्यान दें कि .so फ़ाइल में एक लिंकर स्क्रिप्ट भी हो सकती है, जो इसे फ़ाइल को कहीं और खोजने के लिए या किसी अन्य चीज़ का उपयोग करने के लिए निर्देशित करती है।
दिलचस्प बात यह है कि एक .so फ़ाइल एक पूर्ण विकसित प्रोग्राम भी हो सकती है। उदाहरण के लिए, /lib/libc.so.6 चलाने की कोशिश कर रहा है । (दुख की बात है कि यह अंतिम भाग अधिक आधुनिक प्रणालियों पर काम नहीं करता है। ऐसा नहीं है कि यह एक बहुत बड़ी क्षति है।)
ar -t /usr/lib/libc.a
। वास्तव -
में इस मामले में आवश्यक प्रतीत नहीं होता है। इसके अलावा /lib/libc.so.6.
सिर्फ कुछ आउटपुट प्रिंट करता है। मुझे नहीं पता कि क्या मैं इसे कॉल करूंगा full fledged program
।
ldd
.so पर भी चल सकते हैं , और यह आपको दिखाएगा कि अन्य पुस्तकालय इसका क्या उपयोग करते हैं। स्टेटिक एक संदेश के साथ यह कहेगा कि यह एक गतिशील पुस्तकालय नहीं है।