2011-01-17 17 views
8

के विभिन्न संस्करणों का उपयोग करके बनाई गई ऑब्जेक्ट फ़ाइलों को लिंक करना मेरे पास जीसीसी 4.4.x/4.5.x के आधुनिक संस्करण के साथ सी ++ लाइब्रेरी के निर्माण के आसपास कुछ संगतता चिंताएं हैं, जिससे पुराने संस्करण पर क्लाइंट 3.4.x/4.1 कहते हैं। ।एक्स। एक समाधान जो सुझाव दिया गया है वह ऑब्जेक्ट फ़ाइलों को संकलित करना और इन्हें वितरित करना है। ग्राहक तब जीसीसी और प्रासंगिक एबीआई के किसी भी संस्करण का उपयोग कर लिंक कर सकते हैं। कुछ प्रश्न:जीसीसी

  1. क्या यह सही है?
  2. क्या मुझे libstdC++ संगतता समस्याओं से बचने के लिए स्थिर रूप से लिंक करना चाहिए?
  3. क्या यह अनचाहे है (मैंने सुना है कि जीसीसी 3.4 आगे आगे संगत है)?

चीयर्स, ग्रीम

उत्तर

6

सबसे सुरक्षित उन्हें एक .so और स्थिर द्विआधारी एपीआई के साथ अपने इसी हैडर देने के लिए किया जाएगा। बाइनरी स्थिर होने के लिए कि एपीआई को प्रकार std::string या std::vector<> जैसे स्वीकार नहीं करना चाहिए या std:: प्रकारों का बाइनरी लेआउट संस्करण से संस्करण में बदल सकता है।

और इसे libstdC++ (हाँ, यह संभव है) के साथ स्थिर रूप से लिंक किया जाना चाहिए, ताकि आपके क्लाइंट को libstdC++ के किसी विशेष संस्करण से लिंक न करना पड़े।

ऐसा कहकर, जी ++ का अंतिम एबीआई परिवर्तन, AFAIK, 3.3 और 3.4 के बीच था। 3.4 से आगे ऑब्जेक्ट फ़ाइलों को संगत होना चाहिए।

आप अपनी सभी .o फ़ाइलों को सुविधा के लिए एक .a में भी पैक कर सकते हैं, ताकि जब आप एक नई .o फ़ाइल जोड़ते हैं तो आपके क्लाइंट को नए बनाने के लिए अपने मेकफ़ाइल अपडेट करने की आवश्यकता नहीं होती है।

+0

क्या आप जानते हैं कि सोलारिस पर जीसीसी के लिए यह सच है या नहीं? – Graeme

+0

हाँ। उपर्युक्त सिस्टम विशिष्ट ऑपरेटिंग नहीं है। –