2012-03-21 19 views
296

मैं वर्तमान में AIX पर एक सी अनुप्रयोग को पोर्ट करने का प्रयास कर रहा हूं और उलझन में हूं। एए और .so फाइलें क्या हैं और एप्लिकेशन का निर्माण/चलाने के दौरान उनका उपयोग कैसे किया जाता है?.a और .so फ़ाइलें क्या हैं?

+80

एक लाइब्रेरी 'arrive है और अन्य 's'hared' o'bject –

+0

* के संभावित डुप्लिकेट [.so, .la और .a लाइब्रेरी फ़ाइलों के बीच क्या अंतर है?] (Https: // stackoverflow। com/प्रश्न/12237282/क्या-अंतर-बीच-तो-la-और-एक-पुस्तकालय-फ़ाइलें) *। –

उत्तर

324

पुरालेख पुस्तकालय (.a) स्थिर रूप से लिंक किए जाते हैं i.e जब आप अपने प्रोग्राम को gcc में -c विकल्प के साथ संकलित करते हैं। इसलिए, यदि पुस्तकालय में कोई बदलाव है, तो आपको फिर से अपना कोड संकलित और निर्माण करने की आवश्यकता है।

.a लाइब्रेरी पर .so (साझा ऑब्जेक्ट) का लाभ यह है कि वे रनटाइम के दौरान जुड़े हुए हैं यानी आपके .o फ़ाइल -o विकल्प के निर्माण के बाद जीसीसी में विकल्प। इसलिए, यदि .so फ़ाइल में कोई बदलाव है, तो आपको अपने मुख्य कार्यक्रम को पुन: संकलित करने की आवश्यकता नहीं है। लेकिन सुनिश्चित करें कि आपका मुख्य प्रोग्राम ln कमांड के साथ नई .so फ़ाइल से जुड़ा हुआ है।

इससे आपको .so फ़ाइलों को बनाने में मदद मिलेगी। http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

उम्मीद है कि इससे मदद मिलती है।

+25

+1 जो ओपी को स्पष्ट रूप से – swasheck

+0

की आवश्यकता है (अभी टिप्पणी की तारीख देखें) लिंक टूटा हुआ प्रतीत होता है। – ben

+0

@बेन लॉल, बस इस प्रश्न पर भी आया, और अब काम कर रहा है:> –

129

.a स्थिर पुस्तकालय हैं। यदि आप उनके अंदर संग्रहीत कोड का उपयोग करते हैं, तो यह उनसे लिया जाता है और आपकी बाइनरी में एम्बेड किया जाता है। विजुअल स्टूडियो में, ये .lib फाइलें होंगी।

। इसलिए गतिशील पुस्तकालय हैं। यदि आप उनके अंदर संग्रहीत कोड का उपयोग करते हैं, तो यह आपके स्वयं के बाइनरी में नहीं लिया जाता है और एम्बेड किया जाता है। इसकी बजाय इसे संदर्भित किया गया है, इसलिए बाइनरी उन पर निर्भर करेगी और इसलिए फ़ाइल से कोड को रनटाइम पर जोड़ा/लोड किया जाता है। विजुअल स्टूडियो/विंडोज़ में ये। डीएल फाइलें होंगी (लिंकिंग जानकारी वाले छोटे .lib फाइलों के साथ)।

+11

मेरी राय में, यह स्वीकार्य उत्तर से भी बेहतर बताता है। धन्यवाद! – Petzku

+0

हाय वहाँ decompile करने के लिए कोई विकल्प है। तो सी/सी ++ कोड में फ़ाइल। – Ancee

10

.a फ़ाइलें आमतौर पर पुस्तकालय होते हैं जो स्थिर रूप से जुड़े होते हैं (या अधिक सटीक अभिलेखागार), और
। इसलिए गतिशील रूप से जुड़े पुस्तकालय हैं।

एक बंदरगाह करने के लिए आपको उन स्रोत कोड की आवश्यकता होगी जिन्हें उन्हें बनाने के लिए संकलित किया गया था, या आपके AIX मशीन पर समकक्ष फ़ाइलें।

+0

.so फ़ाइलों का उपयोग करने के लिए मैं अपना आवेदन कैसे बना सकता हूं? – Dunc

+0

दोनों प्रकार के पुस्तकालयों के निर्माण और वेब पर उन्हें जोड़ने के लिए कई उत्कृष्ट संदर्भ हैं। Google आपका मित्र है। –

+0

@ डंक - कुछ तरीके हैं।क्या आपके पास मेकफ़ाइल है? आम तौर पर वह आदेश जो पूरे कार्यक्रम को इकट्ठा करता है (और इसलिए लिंकर को कॉल करता है) पुस्तकालय फ़ाइलों को देखने के लिए स्थानों को निर्दिष्ट करेगा -एल/​​डीआईआर/डीआईआर 1 /.../ और पुस्तकालयों को स्पष्ट रूप से -नाम के नाम से भी नामित कर सकता है। आप पाएंगे कि वास्तविक नाम libname.a या libname.so है। लिंकर तब पता लगा सकता है कि क्या करना है यदि यह एक सामान्य सामान्य कार्यक्रम है। लेकिन आपको अभी भी .so फ़ाइल बनाने या खोजने की समस्या है। क्या आपको इसे बनाने के लिए स्रोत कोड मिला है, या एक AIX लाइब्रेरी है? संसाधनों के लिए – gbulmer

7

इन्हें लिंकिंग चरण में उपयोग किया जाता है। .a फ़ाइलें स्थिर रूप से जुड़ी हुई हैं, और .so फ़ाइलें क्रमबद्ध हैं, इसलिए जब भी आप exe चलाते हैं तो लाइब्रेरी की आवश्यकता होती है।

आप किसी भी lib निर्देशिका में देखकर उन्हें संग्रहीत कर सकते हैं ... /usr/lib और /lib उनमें से अधिकतर हैं, और LIBRARY_PATH पर्यावरण चर भी है।

1

विकिपीडिया इस जानकारी के लिए एक सभ्य स्रोत है।

तरह .a Static libarary

पढ़ साझा लाइब्रेरी फ़ाइलों के बारे में जानने के लिए .so इस पृष्ठ पर Library_(computing)#Shared_libraries पढ़ चाहते स्थिर पुस्तकालय फ़ाइलों के बारे में जानने के लिए, वहाँ भी फ़ाइल अनुभाग के नामकरण में उपयोगी जानकारी है।

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