2010-04-26 9 views
5

के साथ बिल्डिंग बूस्ट मैं लिनक्स मानक बेस http://www.linuxfoundation.org/collaborate/workgroups/lsb से एलएसबी सी ++ कंपाइलर के साथ अपना प्रोग्राम बनाना चाहता हूं। कार्यक्रम बूस्ट लाइब्रेरी पर निर्भर करता है, जीसीसी 4.4 संस्करण के साथ बनाया गया है। संकलन विफल रहता है। क्या एलएसबी सी ++ कंपाइलर के साथ बूस्ट लाइब्रेरी बनाना संभव है? वैकल्पिक रूप से, क्या बूस्ट लाइब्रेरी को कुछ पुराने जीसीसी संस्करण के साथ बनाना संभव है, किस संस्करण की सिफारिश की जाती है? मेरा अंतिम लक्ष्य अधिकांश निष्पादन योग्य और तृतीय-पक्ष बूस्ट पुस्तकालयों को अधिकांश लिनक्स वितरणों पर चलाना है।एलएसबी सी ++ कंपाइलर

आम तौर पर, लिनक्स वितरण के लिए बेहतर बाइनरी संगतता प्राप्त करने के लिए क्या किया जा सकता है, बूस्ट लाइब्रेरी के आधार पर सी ++ बंद-स्रोत एप्लिकेशन विकसित करना?

+0

एलएसबी एक कंपाइलर कब से है? मैंने सोचा कि यह केवल एक विनिर्देश था कि पुस्तकालयों और उपयोगिताओं को कैसे स्थापित किया जाना चाहिए और लिनक्स वितरण पर उपलब्ध होना चाहिए (ताकि अन्य पुस्तकालयों और उपयोगिताओं पर निर्भर हो सकें)। –

+0

माइकल हारून सफान: एलएसबी प्रोजेक्ट अपने स्वयं के सी ++ कंपाइलर प्रदान करता है जिसका उपयोग जीसीसी के बजाय किया जा सकता है, और सभी लिनक्स वितरणों के साथ संगत द्विआधारी उत्पादन करना चाहिए। वास्तव में, मेरे स्वयं के कोड के लिए इस कंपाइलर का उपयोग करने से अच्छे परिणाम मिलते हैं। हालांकि, मुझे अपनी परियोजना में उपयोग की जाने वाली तीसरे पक्ष के पुस्तकालयों में समस्याएं हैं। –

+0

@ माइकल, एलएसबी विनिर्देशों का एक सेट है, लेकिन कार्यसमूह ऐसे टूल भी प्रदान करता है जो इन चश्मे से मेल खाने वाले प्रोग्राम विकसित करने में मदद करते हैं। यहां देखें http://ldn.linuxfoundation.org/lsb/porting-lsb-demo और यहां http://www.linuxfoundation.org/collaborate/workgroups/linux-standard-base-lsb/lsb-sdk-403 –

उत्तर

3

एलएसबी सी ++ कंपाइलर वास्तव में एक कंपाइलर नहीं है। lsbc++ निष्पादन योग्य आपके सिस्टम पर स्थापित जीसीसी कंपाइलर के चारों ओर एक रैपर है (वास्तविक कंपाइलर --lsb-cxx विकल्प के माध्यम से नियंत्रित किया जा सकता है)। देशी gcc कंपाइलर के बजाय एलएसबी रैपर को कॉल करने के लिए आप बूस्ट बिल्ड सिस्टम में सबसे ज्यादा संभावना है।

तो जो मुद्दे उत्पन्न हो सकते हैं, वे संभवतः एलएसबी कंपाइलर भाषा संरचनाओं को संकलित नहीं कर सकते हैं, बल्कि इसके बजाय, कुछ लिंकिंग समस्याएं हैं।

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

एक और मुद्दा यह है कि एलएसबी जीसीसी कंपाइलर रिलीज के पीछे आता है (और बूस्ट कंपेलरों के सभी अंधेरे कोनों में क्रॉल कर सकता है)। जहां तक ​​मुझे पता है, जीसीसी 4.4 पर्याप्त रूप से परीक्षण नहीं किया गया है, तो आप 4.3 कंपाइलर के साथ बेहतर प्रयास करेंगे।

और Google को एलएसबीसीसी के साथ बिल्डिंग बूस्ट से संबंधित कुछ भी नहीं लगता है, इसलिए यदि आप इसे करने में कामयाब होते हैं, तो कृपया अपने अनुभव को साझा करें, उदाहरण के लिए, अपने प्रश्न के अपने उत्तर के रूप में।

+0

मैंने gs+ फ़ाइल को lsbC++ से लिंक के साथ बूस्ट बनाने की कोशिश की। नतीजा यह था कि कई पुस्तकालयों का संकलन विफल रहा। मैं जीसीसी 4.3 संस्करण का प्रयास करूंगा, इस जानकारी के लिए धन्यवाद। –

+0

@ एलेक्स, मुझे आशा है कि लिंक बदलने के साथ ही आपने वास्तविक कंपाइलर को 'lsbC++' की ओर इशारा किया है, इसलिए यह रिकर्स नहीं किया गया :- डी। वैसे भी, आप एलएसबी मेलिंग सूची में सहायता प्राप्त करने का भी प्रयास कर सकते हैं: https://lists.linux-foundation.org/mailman/listinfo/lsb-discuss मेलिंग सूची प्रारूप StackOverflow की तुलना में त्रुटि लॉग के साथ ठोस त्रुटियों पर चर्चा के लिए अधिक उपयुक्त है । –

+0

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

6

मैं हाल ही में यह करने के लिए कहते हैं, इस घटना में है कि यह किसी और के लिए उपयोग की है लिया है इन चरणों का मैं पीछा कर रहे हैं:

  • डाउनलोड करें और LSB एसडीके
  • स्थापित की एक संस्करण को डाउनलोड करें बूस्ट और निकालें/ऑप्ट/बूस्ट/बूस्ट_ < संस्करण > (मैंने 1.43 का उपयोग किया)
  • सुनिश्चित करें कि libbz2-dev स्थापित है।
cd /opt/boost/boost_<version> 
./bootstrap.sh --prefix=/opt/boost --without-libraries=python,mpi --without-icu 
  • संपादित /opt/boost/boost_<version>/project-config.jam और फ़ाइल के शीर्ष के निकट लाइन
using gcc : : /opt/lsb/bin/lsbc++ : <cflags>-U_GNU_SOURCE <cxxflags>-U_GNU_SOURCE ; 

जोड़ने के साथ बूटस्ट्रैप। ध्यान दें कि यदि आप अन्य फ़ाइलों में से किसी एक में उपयोग की घोषणा करते हैं तो यह असफल हो जाएगा, बीजेएम इसकी कॉन्फ़िगरेशन को पढ़ता है, आप --debug-configuration पास कर सकते हैं ताकि यह पता चल सके कि कौन सी फाइलें पढ़ रही हैं।

  • भागो
./bjam cflags=-fPIC cxxflags=-fPIC linkflags=-fPIC install 

मैं या तो अजगर या एमपीआई काम कर पुस्तकालयों प्राप्त करने की कोशिश नहीं की थी, न ही मैं आईसीयू boost.regex लाइब्रेरी के साथ काम करने की कोशिश की थी। उत्तरार्द्ध शायद एलएसबी टूलसेट के साथ आईसीयू पुस्तकालयों के स्थिर संस्करणों का निर्माण करने का मामला है।

-fPIC 32-बिट लिनक्स के लिए सख्ती से जरूरी नहीं है, लेकिन यदि आप स्थिर पुस्तकालयों को 64-बिट लिनक्स के लिए साझा लाइब्रेरी में लिंक करना चाहते हैं तो आवश्यक है।

अंतिम परिणाम /opt/boost/lib में द्विआधारी होना चाहिए और /opt/boost/include में शीर्षलेख होना चाहिए, जाहिर है कि आप अपनी प्राथमिकताओं के अनुरूप उपसर्ग को संशोधित कर सकते हैं। एलएसबी में हमारे सभी कोड को पोर्ट करने से पहले मेरे पास अभी भी काफी काम है, इसलिए मैं इस बात की रिपोर्ट नहीं कर सकता कि प्रमाणीकरण प्रक्रिया कितनी अच्छी तरह से चल रही है।

+0

दिलचस्प, धन्यवाद। वर्तमान में मैं बाइनरी संगतता समस्या को हल करने के लिए ऑटो टूल्स का उपयोग कर रहा हूं। मैं भविष्य के संदर्भ के लिए आपका जवाब रखूंगा। –

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