soname का उपयोग यह संकेत करने के लिए किया जाता है कि आपके लाइब्रेरी समर्थन में बाइनरी एपीआई संगतता क्या है।
SONAME
पुस्तकालय फ़ाइल से निर्धारित वास्तविक लक्ष्य लाइब्रेरी संस्करण से निर्धारित करने के लिए लिंकर द्वारा संकलन समय पर उपयोग किया जाता है। gcc -l NAME
lib NAME
की तलाश करेगा। इसलिए लिंक या फ़ाइल उसके सोनेम को कैप्चर करेगी जो निश्चित रूप से अधिक विशिष्ट होगी (ex libnuke.so libnuke.so.0.1.4 के लिंक जो SONAME libnuke.so.0 शामिल हैं)।
रन टाइम पर यह इसके साथ लिंक होगा, फिर इसे ईएलएफ गतिशील अनुभाग NEEDED
में सेट किया जाएगा, फिर इस नाम के साथ एक लाइब्रेरी (या इसके लिए एक लिंक) मौजूद होना चाहिए। रन टाइम SONAME
पर उपेक्षा है, इसलिए केवल लिंक या फ़ाइल अस्तित्व पर्याप्त है।
टिप्पणी: SONAME केवल लिंक/निर्माण समय पर लागू है, न कि रन टाइम पर।
लाइब्रेरी का 'SONAME' 'objdump -p फ़ाइल | grep SONAME' के साथ देखा जा सकता है। 'obeddump -p फ़ाइल | grep की आवश्यकता' के साथ बाइनरी की 'ज़रूरत' देखी जा सकती है।
[संपादित करें] चेतावनी निम्नलिखित सामान्य टिप्पणी है, लिनक्स में तैनात नहीं। अंत में देखें।
मान लेते हैं आप libnuke.so.1.2 नाम के साथ एक पुस्तकालय है और आप एक नया libnuke पुस्तकालय का विकास करते हैं:
- यदि आपके नए पुस्तकालय एपीआई परिवर्तन के बिना पिछले से एक ठीक है, तो आप सिर्फ एक ही soname रखना चाहिए , फ़ाइल नाम के संस्करण में वृद्धि। यानी फाइल libnuke.so.1.2.1 होगी लेकिन soname अभी भी libnuke होगा .so.1.2।
- यदि आपके पास एक नई लाइब्रेरी है जो केवल नए फ़ंक्शन को जोड़ती है लेकिन कार्यक्षमता तोड़ती नहीं है और अभी भी पिछली के साथ संगत है, तो आप पिछले प्लस की तुलना में उसी सोनम का उपयोग करना चाहेंगे जैसे कि 1। यानी फ़ाइल और सोनम libnuke.so.1.2.1 होगा। Libnuke.1.2 से जुड़ा कोई भी प्रोग्राम अभी भी उस के साथ काम करेगा। Libnuke.1.2.1 से जुड़े नए प्रोग्राम केवल उस के साथ काम करेंगे (जब तक नया उपखंड libnuke.1.2.1.1 की तरह नहीं आ जाता)।
- यदि आपके नए पुस्तकालय किसी भी libnuke साथ संगत नहीं है: libnuke.so.2
- यदि आपके नए पुस्तकालय नंगे पुराने संस्करण के साथ संगत है: libnuke.so.1.3 [यानी अभी भी libnuke.so के साथ संगत।1]
[संपादित करें] पूर्ण करने के लिए: लिनक्स केस।
एक विशिष्ट रूप के रूप में लिनक्स वास्तविक जीवन SONAME में:। lib [NAME] [एपीआई-संस्करण] .so [मेजर संस्करण] प्रमुख-संस्करण केवल एक पूर्णांक मान प्रत्येक प्रमुख पुस्तकालय परिवर्तन में वृद्धि है। एपीआई-संस्करण डिफ़ॉल्ट रूप से रिक्त है
पूर्व libnuke.so.0
तब वास्तविक फ़ाइल नाम लघु संस्करणों और subversions शामिल पूर्व: libnuke.so.0.1.5
मुझे लगता है कि एक soname प्रदान नहीं फाइल का नाम बदलने के बाद से यह एक बुरा अभ्यास है क्योंकि इसका व्यवहार बदल जाएगा।
स्रोत
2013-01-30 20:56:05
फिलिप, डेविड ए व्हीलर (http://bit.ly/1CkQJmR) के अनुसार, soname एक एकल संस्करण संख्या, libnuke की तरह है। तो .1 या libnuke.so.4। क्या आपको पता है कि दूसरा संस्करण संख्या वास्तव में soname का हिस्सा हो सकती है, जैसे libnuke.so.1.2? –
खैर, कई अंकों के साथ सोनमा, उदाहरण के लिए openssl लाइब्रेरी के लिए: SONAME: libssl.so.0.9.8, लेकिन आप सही हैं कि यह "प्रोग्राम लाइब्रेरी हाउटो" से अधिक सामान्य है जो वास्तव में –
पर अधिक प्रतिबंधक लगता है यह वर्णन करने के लिए कि फ़ाइल नाम और सोनम को अलग-अलग सेट किया जाना चाहिए, लेकिन आप वर्णन नहीं करते कि बाद के मामलों में सोनम को कैसे सेट किया जाना चाहिए। – poolie