2013-04-27 8 views
10

मुझे स्कोर को व्यवस्थित करने में सहायता करें।एकाधिक प्लेटफ़ॉर्म के लिए लिनक्स बाइनरी बिल्डिंग

मेरे पास सी ++ में लिखे गए सॉफ़्टवेयर का एक टुकड़ा है जिसका अर्थ है जितना संभव हो उतना लिनक्स वितरण चलाने के लिए और मुझे एक ऐसी रणनीति को समझने की आवश्यकता है जो प्रभावी है। मैं इस मामले में द्विआधारी जहाज को स्रोत कोड नहीं भेज रहा हूं (जानना अच्छा होगा)। यह पहले से ही एक वाणिज्यिक उत्पाद है और मेरे पास बौद्धिक संपदा के मुद्दे हैं जो मुझे उत्पाद को खोलने से रोकते हैं लेकिन इसका मतलब है कि मुझे जीपीएल मुद्दों के असंख्य से निपटना होगा।

तर्क की वर्तमान पंक्ति कम से कम आम denominator चुनने और उस सब कुछ बनाने के लिए किया गया है। इसमें दो प्रमुख प्रभाव हैं जो मुझे काउंटर उत्पादक पाते हैं।

  1. जीसीसी के पुराने संस्करणों में सी ++ समर्थन में कुछ और आधुनिक सी ++ विशेषताएं शामिल हैं।
  2. कम से कम आम विभाजक जरूरत पर जोर देता रेड हैट एंटरप्राइज लिनक्स 4 (RHEL4)

मैं निश्चित रूप से पूरे सी ++ 11 सुविधा सेट की जरूरत नहीं है, लेकिन मुझे लगता है कि करने के लिए सी ++ समर्थन को लाने के लिए करना चाहते हैं विजुअल सी ++ 2010 का। मैं इस विचार को समझ रहा हूं कि क्लैंग/libC++ का उपयोग जीसीसी/libstdC++ के विपरीत जहां संभव हो।

आरएचईएल 4 में सी ++ अनुप्रयोगों के निर्माण के लिए व्यापक क्रॉस प्लेटफ़ॉर्म समर्थन नहीं लगता है, और अधिक, मुझे लिनक्स के विभिन्न संस्करणों में एबीआई की स्थिरता में थोड़ा अंतर्दृष्टि है, लेकिन मुझे चिंता है कि आरएचईएल 4 मूल्य से अधिक परेशानी है। कुछ के आधार पर सभी वितरणों के निर्माण के लिए प्रयास करना एक व्यवहार्य रणनीति नहीं है।

मुझे लगता है कि लिनक्स के विभिन्न वितरण के लिए सॉफ़्टवेयर संकलित करना लक्ष्य मंच पर टूल के साथ लक्ष्य प्लेटफॉर्म के लिए सॉफ़्टवेयर संकलित करके सबसे अच्छा है। मैं वर्तमान में इस धारणा के तहत परिचालन कर रहा हूं कि यदि आप इसे गले लगाते हैं तो आप विशाल पोर्टेबिलिटी मुद्दों को पार लिनक्स प्लेटफॉर्म पर चलाएंगे। कई पुस्तकालयों के बारे में बात न करें जिन्हें आप प्लेटफार्म/वितरण में सी ++ एबीआई अस्थिरता के कारण लिंक कर सकते हैं या नहीं कर सकते हैं।

लेकिन मैं गलत हो सकता था, मैं उन लोगों से सुनना चाहता हूं जो नियमित आधार पर इसका सामना करते हैं। क्या काम करेगा और क्यों? या अधिक महत्वपूर्ण बात, क्या काम नहीं करेगा?

+3

यदि मैं सॉफ़्टवेयर के लिए भुगतान कर रहा हूं तो क्या होता है यदि मैं एक लिनक्स पर एक बड़ी रिपोर्ट करता हूं जो आपके पास नहीं है - निश्चित रूप से उस उत्पाद का समर्थन करने के लिए जिसे आपने लिनक्स के समर्थित संस्करण पर उपज का परीक्षण किया है - इस प्रकार आपको एक होना चाहिए प्रत्येक के लिए वीएम और वहां – Mark

+0

@ मेरे विचार ठीक से चिह्नित करें, यह प्रगति पर काम कर रहा है। –

+0

http://stackoverflow.com/questions/2157636 | http://stackoverflow.com/questions/16250831 | http://stackoverflow.com/questions/15386027 –

उत्तर

7

तुम एक पर ध्यान केंद्रित करने की कोशिश कर सकते व्यक्तिगत वितरण के बजाय कुछ प्रमुख प्लेटफॉर्म। इसका मतलब है कि मैं "आधारभूत डिस्ट्रोज़" (डेबियन और रेडहाट) कहता हूं, और दूसरों पर सर्वश्रेष्ठ के लिए आशा करता हूं।

सबसे अधिक संभावना है कि डेबियन बाइनरी (जो स्थिर रूप से जुड़े हुए हैं) उबंटू और मिंट और अन्य डेबियन व्युत्पन्न वितरण पर ठीक चलेंगे। रेडहाट बाइनरी शायद सेंटोस, वैज्ञानिक लिनक्स और एसयूएसई लिनक्स पर चलेंगे। यदि आप कम लोकप्रिय distros के बारे में परवाह करते हैं (कहें कि आपके पास बहुत से ग्राहक कुछ असामान्य लिनक्स चला रहे हैं), और न तो आपके डेबियन या रेडहाट निष्पादन योग्य काम करते हैं या किसी भी तरह काम करने के लिए किए जा सकते हैं, फिर उस डिस्ट्रो का वीएम सेट करें और एक निष्पादन योग्य बनाएं विशेष रूप से उस स्वाद के लिए।

मैंने इस दृष्टिकोण को अतीत में लिया है और यह अच्छी तरह से काम कर चुका है।

+1

लेकिन क्या आप डेबियन और आरएचईएल के लिए अलग-अलग बाइनरी रखने की सलाह देते हैं? –

4

अपने सॉफ्टवेयर को कुछ ओपन-सोर्स free software (उदा। जीपीएलवी 3 + लाइसेंस) बनाने का सबसे अच्छा तरीका है, तो यदि आपका सॉफ़्टवेयर पर्याप्त दिलचस्प है तो यह वितरण (वितरण रखरखाव द्वारा) में पैक हो जाएगा।

आप हमेशा वितरण पैकेज (उदाहरण के लिए .deb उबंटू या डेबियन के लिए फाइलें) प्रदान करना चाहते हैं क्योंकि ये इंस्टॉल करने के लिए सबसे आसान हैं।

आप अभी भी मालिकाना सॉफ्टवेयर बनाना चाहते हैं (लेकिन अपने आप से पूछना अगर आप बेचते हैं, या यहां तक ​​कि मुक्त करने के लिए वितरित करने के लिए सक्षम हो जाएगा, सफलतापूर्वक अपने सॉफ्टवेयर), आप निम्नलिखित कदम उठाने सकता है:

  • एक स्थैतिक stdC++ & एक स्थैतिक libgcc सक्षम करने के द्वारा हाल ही में जीसीसी कंपाइलर (उदाहरण के लिए 4.8) संकलित करें (प्रदान किया गया अधिकांश वितरण जीसीसी ऐसा नहीं करता है)।

  • शायद आपके प्रोग्राम को स्थिर रूप से लिंक करें (लेकिन हो सकता है कि आप ऐसा करने में सक्षम न हों, उदाहरण के लिए /etc/nsswitch.conf संबंधित कार्यों, getaddrinfo और संबंधित DNS सेवाओं सहित)।

यहां तक ​​कि सभी सी ++ संबंधित सामान स्थिर आप अभी भी libc.so.6 पर निर्भर करते हैं और फिर आप कुछ ग्नू libc संस्करण मुद्दों हो सकता है जोड़ने के द्वारा (इसलिए एक द्विआधारी एक libc संस्करण 2.17 के लिए संकलित हमेशा एक libc साथ नहीं चलेंगे 2.16 या विपरीतता से)। यह भी ध्यान दें कि जीएनयू libc आमतौर पर कुछ कर्नेल संस्करण से बंधे हैं (आप कुछ पुराने पुराने कर्नेल पर हाल ही में libc का उपयोग नहीं कर सकते हैं)। आप विचार कर सकते हैं MUSL libc

जैसे कुछ विकल्प libc BTW, आप आम तौर पर कुछ chroot एड लक्ष्य पर्यावरण का उपयोग कर सकते हैं (जिसमें आप कुछ अन्य वितरण, जैसे debootstrap के साथ स्थापित हो सकता है।)

+1

मुझे शायद यह जोड़ना चाहिए कि यह पहले से ही एक व्यावसायिक रूप से व्यवहार्य सॉफ्टवेयर पैकेज है लेकिन वर्तमान में स्रोत खोलने के लिए कोई भी योजना नहीं है। यह एक प्रमुख बौद्धिक संपदा मुद्दा है, अभी के लिए, यह एक बंद स्रोत होना चाहिए। लेकिन आपकी अंतर्दृष्टि के लिए धन्यवाद, इनमें से कुछ आगे बढ़ने की रणनीति चुनने में सहायक होंगे। –

2

यदि कोई उत्सुक है तो हमने आरएचईएल 4.8 डिस्ट के शीर्ष पर एक जीसीसी 4.8 टूलचैन बनाने के द्वारा समस्या का हल किया है जो हमारे निर्माण एजेंट के रूप में जारी है।

इसका क्रूक्स here रेखांकित है। समस्या थोड़ी सरल थी क्योंकि हमें पूरी तरह से कार्यात्मक क्रॉस कंपाइलर की आवश्यकता नहीं है। लक्ष्य होस्ट पर बस एक जीसीसी 4.8 टूलचेन।

इंटरऑपरेबिलिटी अभी भी दर्द था क्योंकि लिनक्स के इस पुराने संस्करण में एसएमबी और/या अन्य तकनीक के लिए लगभग कोई समर्थन नहीं था। हम एक बैश स्क्रिप्ट के साथ समाप्त हुए जो एक FTP सर्वर में निर्माण आउटपुट डालता है और यह काफी अच्छा काम करता है। इसने बड़ी पीड़ा हल की।

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