मैं प्रोजेक्ट के किसी भी पुस्तकालय में त्वरित सुधार करना चाहता हूं। क्या एसएसओ को फिर से सम्मिलित करना और मूल को प्रतिस्थापित करना सुरक्षित है? या मुझे पूरी परियोजना का पुनर्निर्माण और पुनर्स्थापित करना होगा? या यह निर्भर करता है?लिनक्स पर प्रोजेक्ट में साझा पुस्तकालयों (.so) में से किसी एक में फ़िक्स कैसे करें?
उत्तर
यह निर्भर करता है। आपके निष्पादन योग्य के साथ साझा लाइब्रेरी binary-compatible होना चाहिए।
उदाहरण के लिए,
- अगर आप पुस्तकालय के आंतरिक कार्यों में से एक के व्यवहार बदल गया है, आप शायद पुनः संकलित की जरूरत नहीं है।
- यदि आपने एक संरचना का आकार बदल दिया है (उदाहरण के लिए एक सदस्य जोड़कर) जिसे एप्लिकेशन द्वारा जाना जाता है, तो आपको पुन: संकलित करने की आवश्यकता होगी, अन्यथा लाइब्रेरी और एप्लिकेशन को लगता है कि संरचना इससे छोटी है, और जब क्रैश हो जाएगी लाइब्रेरी एक अतिरिक्त अनियमित सदस्य को पढ़ने की कोशिश करता है जिसे एप्लिकेशन ने नहीं लिखा था।
- यदि आप अनुप्रयोगों से दिखाई देने वाले किसी भी फ़ंक्शन के तर्क या तर्क की स्थिति बदलते हैं, तो आपको पुन: संकलित करने की आवश्यकता है, क्योंकि लाइब्रेरी उस पर लगाए गए स्टैक से अधिक तर्क पढ़ने की कोशिश करेगी (यह है सी के साथ मामला, सी ++ तर्क प्रकारों में फ़ंक्शन हस्ताक्षर का हिस्सा हैं, इसलिए ऐप क्रैश होने के बजाए रन को अस्वीकार कर देगा)।
अंगूठे (उत्पादन रिलीज के लिए) का नियम है कि, अगर आप जानबूझकर जानकारी नहीं है कि आप दोहरी संगतता बनाए रखने रहे हैं, या नहीं यकीन है कि क्या दोहरी संगतता है, तो आप पुन: संयोजित करना चाहिए।
3 के संबंध में: डिफ़ॉल्ट पैरामीटर में परिवर्तन एबीआई पर शून्य प्रभाव पड़ता है। सीडीसीएल कॉल के लिए (सी में डिफ़ॉल्ट, और जीसीसी में इस के लिए), कॉलर वास्तव में ढेर को साफ करता है। उम्मीद से अधिक पैरामीटर पास करना भी ठीक है, लेकिन दाएं से बाएं कॉलिंग सम्मेलनों के लिए कम नहीं है। –
@ मैट, मैंने * डिफ़ॉल्ट * तर्कों का उल्लेख नहीं किया, केवल तर्क। :) इसके अलावा, लाइब्रेरी पक्ष पर अधिक तर्क के साथ समाप्त होने के बजाय, अधिक कम है, इसलिए लाइब्रेरी कचरा मूल्यों तक पहुंचने का प्रयास करेगी। –
यह निश्चित रूप से गतिशील पुस्तकालयों का उपयोग करने का इरादा है: यदि लाइब्रेरी में कुछ अपडेट करने की आवश्यकता है, तो आप केवल लाइब्रेरी अपडेट करें, और प्रोग्राम जो इसका उपयोग करते हैं उन्हें बदलने की आवश्यकता नहीं है। यदि आप जिस फ़ंक्शन को बदल रहे हैं उसका हस्ताक्षर बदलता नहीं है, और यह वही काम पूरा करता है, तो यह सामान्य रूप से ठीक होगा।
निश्चित रूप से हमेशा किनारे के मामले हैं जहां एक कार्यक्रम किसी फ़ंक्शन के कुछ अनियंत्रित दुष्प्रभाव पर निर्भर करता है, और फिर उस फ़ंक्शन के कार्यान्वयन को बदलने से साइड इफेक्ट बदल सकता है और प्रोग्राम को तोड़ सकता है; लेकिन c'est la vie।
यदि आपने साझा लाइब्रेरी के ABI को नहीं बदला है, तो आप लाइब्रेरी को पुनर्निर्माण और प्रतिस्थापित कर सकते हैं।
यदि आप अपनी लाइब्रेरी बाइनरी इंटरफ़ेस नहीं बदलते हैं, तो केवल साझा लाइब्रेरी को पुन: संकलित करना और पुन: नियोजित करना ठीक है।
अच्छा संदर्भ:
यह हाँ निर्भर करता है।
हालांकि, मुझे लगता है कि आपके पास एक ही स्रोत और कंपाइलर है जो अन्य सामानों का निर्माण करता है और अब यदि आप केवल .cpp
फ़ाइल में कुछ बदलते हैं, तो यह ठीक है।
अन्य चीजें उदा। एक हेडर फ़ाइल में एक इंटरफ़ेस (साझा lib और शेष सिस्टम के बीच) को बदलना ठीक नहीं है।
- 1. एक स्वचालित लाइब्रेरी में एक साझा लाइब्रेरी (.so) कैसे बनाएं?
- 2. लिनक्स में साझा लाइब्रेरी का उपयोग करने वाली एक ही प्रक्रिया के उदाहरणों में साझा लाइब्रेरी (.so) में वैश्विक चर को कैसे साझा करें?
- 3. साझा पुस्तकालयों को लोड करने में त्रुटि
- 4. जीसीसी/लिनक्स: एक स्थिर पुस्तकालय को .so में जोड़ना?
- 5. त्रुटि साझा पुस्तकालयों libstdC++ लोड हो रहा है so.5
- 6. एंड्रॉइड एप्लिकेशन में मौजूदा साझा लाइब्रेरी (.so) का उपयोग
- 7. लिनक्स पर साझा पुस्तकालयों के संबंध में अच्छे अभ्यास क्या हैं?
- 8. लिनक्स में स्थिर पुस्तकालयों के लिए lib {library name} .a/.so नामकरण सम्मेलन है?
- 9. किसी अन्य प्रोजेक्ट में मेरे प्रोजेक्ट में एक फॉर्म जोड़ें
- 10. साझा पुस्तकालयों के लिए मेकफ़ाइल?
- 11. एमपीआई - लोड करने में त्रुटि साझा पुस्तकालयों
- 12. मेरे प्रोजेक्ट में से किसी एक में वर्जन
- 13. पायथन में फ़िक्स आकार सूची कैसे बनाएं?
- 14. एक्लिप्स में लिनक्स सी ++ प्रोजेक्ट कैसे सेट करें?
- 15. उसी कॉलबैक हस्ताक्षर के साथ .dll और .so में जेएनए का उपयोग कैसे करें
- 16. मैं एक साझा प्रोजेक्ट को एक साझा Mercurial बहु-भंडार में कैसे धक्का दूं?
- 17. कई सी/सी ++ पुस्तकालयों को एक में कैसे गठबंधन करें?
- 18. साझा जीबीसी साझा पुस्तकालयों में अपरिभाषित संदर्भों के बारे में सूचित करने के लिए
- 19. एंड्रॉइड प्रोजेक्ट के लिए इंटेलिज आईडीईए में .so lib कैसे शामिल करें?
- 20. साझा ऑब्जेक्ट्स (.so), स्थिर पुस्तकालय (.a), और डीएलएल (.so) के बीच अंतर?
- 21. एक साझा लाइब्रेरी में एक स्थिर लाइब्रेरी को कनवर्ट करें?
- 22. किसी प्रोजेक्ट के हिस्से के रूप में ग्रहण में उपयोगकर्ता पुस्तकालयों को परिभाषित करना और कार्यक्षेत्र
- 23. एकाधिक ऑपरेटिंग सिस्टम (विभिन्न दुभाषिया पथ) में एक PyCharm प्रोजेक्ट साझा करें
- 24. लिंक करना अभिलेखागार (ए) साझा वस्तु (.so)
- 25. dlopen के साथ लोड किए गए साझा पुस्तकालयों में gdb प्रिंट प्रतीक कैसे बनाएं?
- 26. लिनक्स आरपीएथ में निष्पादन योग्य स्थान को एन्कोड कैसे करें?
- 27. ग्रहण हेलीओस के भीतर किसी अन्य प्रोजेक्ट में पुस्तकालयों का संदर्भ कैसे दे सकता हूं?
- 28. लिनक्स में अन्य साझा लाइब्रेरी के विरुद्ध साझा लाइब्रेरी को कैसे लिंक करें?
- 29. lib के बिना किसी साझा लाइब्रेरी से लिंक कैसे करें * एक अलग निर्देशिका में उपसर्ग?
- 30. किसी प्रोजेक्ट के वसंत-config.xml को किसी अन्य प्रोजेक्ट के spring-config.xml में कैसे आयात करें?
मेकफ़ाइल पर यह निर्णय लेने के लिए नहीं है कि किन घटकों को पुनर्निर्माण की आवश्यकता है? तो आपको देखना चाहिए कि आपको कौन सी फाइलों को बदलना चाहिए। –
@ott: रनटाइम के बारे में जानने या देखभाल करने वाला नहीं है। इसलिए जब तक आप इसे नहीं बताते तब तक deps। यह निश्चित रूप से व्यावहारिक नहीं है कि एबीआई के बारे में निर्णय लेने के लिए उसे क्या करना है। –