2015-11-27 5 views
13

मेरे पास प्लग-इन लेखकों के लिए सी ++ इंटरफ़ेस के हिस्से के रूप में उपयोग की जाने वाली एसटीएल ऑब्जेक्ट्स के साथ एक एप्लिकेशन है।एसटीएल ऑब्जेक्ट्स के साथ एसटीएल ऑब्जेक्ट्स के साथ साझा लाइब्रेरीज़ की जीसीसी संगतता

मुझे पता है कि अनुकूलता के लिए सबसे अच्छा विकल्प इसके बजाय एक सी इंटरफ़ेस का उपयोग करना होगा, लेकिन यह वर्तमान में व्यवहार्य नहीं है।

मुझे पता है कि libstdC++ में जीसीसी 3.4 से 4.8 तक सब कुछ एबीआई के मामले में अत्यधिक संगत रहा है।

तो उदाहरण के लिए, यदि मैं जीसीसी 4.1 के साथ संकलित करता हूं, और एक प्लग-इन विक्रेता जीसीसी 4.7 के साथ संकलित कोड लिखता है, तो कोने के मामलों को छोड़कर सभी एक जीबीसी 4.7 या उसके बाद के संस्करण के साथ libstdC++ संस्करण के साथ एक मंच पर अच्छे होंगे, प्रदान किया गया है एसटीएल उपयोग केवल .so के लिए आंतरिक है, और बाहरी .so इंटरफ़ेस शुद्ध सी का उपयोग कर रहा है, जो दुख की बात है कि मेरे लिए मामला नहीं है।

तो, मैं प्लग-इन इंटरफ़ेस के हिस्से के रूप में उपयोग किए जाने वाले एसटीएल कक्षाओं के संबंध में मामला क्या होगा इस बारे में उत्सुक हूं। क्या मैं सुरक्षित ऑब्जेक्ट्स के बीच एसटीएल ऑब्जेक्ट्स को सुरक्षित रूप से पास कर सकता हूं जिन्हें एक ही कंपाइलर संस्करण (जैसे 4.1 और 4.8) से संकलित नहीं किया गया था? और अगर कुछ अलग संकलक विकल्पों का उपयोग करते हैं तो टेम्पलेट्स को संकलित और हल करने के संबंध में मुझे कुछ भी ध्यान देने की आवश्यकता है?

मुझे संदेह है कि यह समस्याग्रस्त हो जाएगा। हालांकि, एक मौका है कि जीसीसी लोगों द्वारा किए गए प्रतीक वर्जनिंग जादू किसी भी तरह से यह काम कर सकता है।

इस प्रश्न के लिए, मुझे केवल पूर्व-सी ++ 11 संकलन और लिंकिंग में रूचि है। मैं जीसीसी का उपयोग कर लिनक्स और मैक ओएस एक्स में भी रूचि रखता हूं।

+1

जब तक लोग इसे विफल करने के अपने रास्ते से बाहर नहीं जा रहे हैं, तो यह ठीक काम करना चाहिए। –

+0

@marc प्रतिक्रिया के लिए धन्यवाद। कोई भी मौका आप एक संदर्भ या एक लिंक प्रदान कर सकते हैं जो इसमें कुछ और विस्तार से (या शायद इस पर भरोसा करने वाली परियोजनाओं) में जाता है? – Rob

+1

यह आवश्यक नहीं होगा, हालांकि, जीसीसी> = 5.0 के लिए, क्योंकि उन्होंने [एबीआई बदल दिया] [https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html) – Walter

उत्तर

7

मैंने पहले से ही mailing list पर इसका उत्तर दिया है, लेकिन मार्क ने कहा है, यह सिर्फ काम करेगा।

इससे कोई फर्क नहीं पड़ता कि आप आंतरिक रूप से अपने डीएसओ या इंटरफ़ेस में लाइब्रेरी का उपयोग करते हैं, लाइब्रेरी परवाह नहीं है और पिछली बार जीसीसी 3.4 पर संगत है।

+0

उत्तर के लिए बहुत धन्यवाद! मैं इसे स्वीकार करूंगा, क्योंकि आप libstdC++ पर एक प्राधिकरण हैं। मेलिंग सूची पर उल्लेख करते हुए, यदि कोई दस्तावेज है तो आप मुझे एबीआई संगतता की लगातार उच्च डिग्री प्राप्त करने के बारे में बता सकते हैं (उदाहरण के लिए मेमोरी लेआउट लगातार बना रहता है, इनलाइनिंग लगातार बना रहता है, आदि), फिर यह सराहनीय है। – Rob

+0

@ जोनाथन वाकीली यदि आपको कोई परिदृश्य मिलता है जहां lib/new malloc lib के अंदर किया जाता है, तो पॉइंटर किसी भी तरह उपयोगकर्ता के एप्लिकेशन को प्रचारित करता है और हटा/मुक्त किया जाता है? मैंने उन परिदृश्यों को देखा है जहां एक से अधिक libc संस्करण हैं और एक ही एप्लिकेशन में एक से अधिक स्मृति आवंटक हैं, और उपर्युक्त परिदृश्य तब एप्लिकेशन को क्रैश कर सकता है। –

+0

@ ErikAlapää, एक से अधिक libc होने आपकी समस्या है, libstdC++ की समस्या नहीं है। मानक कहता है कि आवंटन कार्य वैश्विक हैं, यदि आप एकाधिक असंगत आवंटन कार्यों के जरिए वन परिभाषा नियम का उल्लंघन करते हैं तो आपको इसे स्वयं से निपटने की आवश्यकता है। –

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