.A और .so फाइलें क्या हैं?


427

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


116
एक पुस्तकालय है archive और अन्य है shared object
Shiplu Mokaddim

जवाबों:


483

आर्काइव लाइब्रेरीज़ (.A) स्टेटिकली लिंक्ड हैं यानी जब आप gcc में -c ऑप्शन के साथ अपना प्रोग्राम कंपाइल करते हैं। इसलिए, यदि लाइब्रेरी में कोई बदलाव है, तो आपको अपने कोड को फिर से संकलित करने और बनाने की आवश्यकता है।

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

यह आपको .so फ़ाइलों के निर्माण में मदद करेगा। http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

उम्मीद है की यह मदद करेगा।


2
इनमें से कोई भी pic(स्वतंत्र कोड स्थिति) से संबंधित है ?
transang

213

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

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


नमस्ते, वहाँ। / c ++ कोड में .so फ़ाइल को हटाने का कोई विकल्प है?
जिषांत

@Acecee: इस प्रश्न को देखें: stackoverflow.com/questions/205059/is-there-ac-decompiler
Paul Wintz

के लिए एक छोटी .libफ़ाइल को .dllआयात लाइब्रेरी कहा जाता है।
मनी ओरिएंटेड प्रोग्रामर

13

.A फाइलें आमतौर पर लाइब्रेरीज़ होती हैं, जो स्टैटिकली लिंक्ड (या अधिक सटीक आर्काइव) प्राप्त करती हैं, और।
डायनॉमिकली लिंक्ड लाइब्रेरियाँ होती हैं।

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


मैं .so फ़ाइलों का उपयोग करने के लिए अपने एप्लिकेशन का निर्माण कैसे करूं?
डनक

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

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

10

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

आप पा सकते हैं कि वे कहाँ से किसी भी तरह की लीबी डाइरेक्टरीज़ को देख कर स्टोर किए गए हैं ... /usr/libऔर /libउनमें से अधिकांश हैं, और LIBRARY_PATHपर्यावरण चर भी है ।


0

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

स्थिर पुस्तकालय फ़ाइलों की तरह ए पढ़ के बारे में जानने के लिए स्टेटिक libarary

साझा लाइब्रेरी फ़ाइलों के बारे में जानने के लिए .so पढ़े लाइब्रेरी_ (कंप्यूटिंग) # शेडिंग_ लाइब्रेरीज़ इस पृष्ठ पर, फ़ाइल नामकरण अनुभाग में उपयोगी जानकारी भी है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.