gcc
जेंटू प्रणाली पर अपग्रेड करने के बाद किन पैकेजों का पुनर्निर्माण किया जाना चाहिए ? क्या यह चलाने के लिए पर्याप्त है
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
जैसा कि इस अकसर किये गए सवाल में पर्ल के लिए समान है ?
gcc
जेंटू प्रणाली पर अपग्रेड करने के बाद किन पैकेजों का पुनर्निर्माण किया जाना चाहिए ? क्या यह चलाने के लिए पर्याप्त है
# emerge -a --oneshot `equery depends gcc |awk '{print " ="$1}'`
जैसा कि इस अकसर किये गए सवाल में पर्ल के लिए समान है ?
जवाबों:
टी एल; डॉ
मैं एक जेंटू उपयोगकर्ता के रूप में इस पर एक अलग ले रहा हूं। जब मैं "लेट द सिस्टम डिसाइड" के पीटरफ के दृष्टिकोण से सहमत हूं, तो जब मैं एबीआई अपडेट की बात करता हूं तो मैं असहमत हूं । एक ABI अपडेट कभी-कभी व्यवहार में एक प्रमुख बदलाव होता है। जीसीसी 4.7 के मामले में, एबीआई चेंज नए सी ++ 11 स्टैंडर्ड को अपनाने वाला था, जिसे पीटरफ ने भी इंगित किया था।
इसीलिए मैं यह उत्तर लिखता हूँ। मैं एक मानक नशेड़ी हूं। मैंने वेब दुनिया में शुरू किया था जब लगभग 4 अलग-अलग ब्राउज़र थे, और HTML में टैग का ढेर जो केवल कुछ ब्राउज़रों द्वारा समर्थित था। उस समय, उन सभी टैगों में भ्रम बढ़ गया, और IMO ने और अधिक मेहनत की। C ++ को इसी कारण से मानकीकृत किया गया है, इसलिए संक्षेप में आप उस कोड को संकलित कर सकते हैं जो मैं लिखता हूं, और मैं आपके द्वारा लिखे गए कोड को संकलित कर सकता हूं । यदि हमने एक मानक का पालन नहीं करने का फैसला किया है, तो हम साझा करने की स्वतंत्रता खो देते हैं।
सी ++ 98 13 वर्षों के लिए अनुमोदित मानक है। C ++ 11 को 2011 में आईएसओ समिति द्वारा अनुमोदित किया गया था, और इसे पूरी तरह से GCC 4.7 में एकीकृत किया गया था। देखें वर्तमान आईएसओ स्थिति , और नए आईएसओ स्टैंडर्ड ।
स्रोत-आधारित वितरण के उपयोगकर्ताओं के रूप में, हमारे पास पैकेज के भविष्य के व्यवहार को आकार देने का अनूठा अवसर है क्योंकि हम इसे उपयोग करने से पहले संकलित करते हैं। इस प्रकार, उस अवसर की तैयारी के लिए, मुझे लगता है कि नए कंपाइलर को अपडेट करते समय निम्नलिखित कमांड को चलाया जाना चाहिए:
emerge -ev system
gcc-config -l && gcc-config *new compiler name*
env-update && source /etc/profile
emerge -1v libtool
emerge -ev system
सिस्टम के माध्यम से पहला पास नए संकलक का निर्माण करता है, और यह पुराने संकलक के साथ निर्भरता है। सिस्टम के माध्यम से दूसरा पास नए संकलक का पुनर्निर्माण करता है और यह नए संकलक के साथ निर्भरता है। विशेष रूप से, हम ऐसा करना चाहते हैं ताकि हमारी बिल्ड चेन नए कंपाइलर की नई सुविधाओं का लाभ उठा सके, अगर बिल्ड चेन पैकेज को भी अपडेट किया गया है ... कुछ लोग दुनिया के सेट के साथ सिस्टम से दूसरे पास से गुजरते हैं, हालांकि मैं इसे ओवरकिल होने का पता लगाएं, क्योंकि हम नहीं जानते कि कौन से पैकेज पहले से ही नए मानक का समर्थन करते हैं, लेकिन हम चाहते हैं कि हमारी बिल्ड चेन पूरी तरह से व्यवहार करे।
कम से कम सिस्टम सेट के लिए ऐसा करते हुए, हमें हर पैकेज का परीक्षण करने के लिए तैयार करता है जिसे हम नए मानक के खिलाफ संकलित करते हैं, क्योंकि हम एक रोलिंग रिलीज का उपयोग करते हैं। इस तरह, बिल्ड चेन को अपडेट -std=c++11
करने के CXXFLAGS
बाद जोड़ने से हमें ब्रेक्जिट के लिए परीक्षण करने की अनुमति मिलती है, और हमारे बगज़िला या अपस्ट्रीम पर सीधे बग को जमा करने में सक्षम हो सकते हैं:
अरे, आपका पैकेज blah blah नए C ++ मानक का उपयोग करके टूट जाता है, और मैंने अपना बिल्ड लॉग संलग्न किया है।
मैं इसे डेवलपर्स के लिए एक शिष्टाचार मानता हूं, क्योंकि उनके पास अब तैयार करने का समय है क्योंकि मानक अधिक व्यापक रूप से अपनाया जाता है, और पुराने मानक को चरणबद्ध किया जाता है। यदि वह सैकड़ों कीड़े प्राप्त करता है, तो उसे विकासकर्ता के हिस्से पर हंगामा की कल्पना करें, क्योंकि वह तब तक इंतजार करता था जब तक कि मानक समाप्त नहीं हो जाता ...
कोई अन्य वितरण जो मुझे पता है कि इस पद्धति का उपयोग कर सकते हैं क्योंकि पैच या अपडेट से पहले वास्तविक पैकेज अनुरक्षक बिचौलियों के रूप में मौजूद हैं, संबंधित उपयोगकर्ता समुदाय द्वारा उपयोग किया जा सकता है। हमारे पास अनुरक्षक हैं, लेकिन हमारे पास स्थानीय पोर्टेज ट्री का उपयोग करने की क्षमता भी है।
मुझे नहीं पता कि क्या यह इनाम पोस्ट किया गया था क्योंकि आप सभी को मेरा आनंददायक, अच्छी तरह से सोचा हुआ उत्तर पसंद है, लेकिन इनाम में एक प्रयास में, मैं आपके व्यावहारिक, अच्छी तरह से सोचा गया इनाम का जवाब देने का प्रयास करूंगा। सबसे पहले, मुझे जवाब में कहना है कि एक स्रोत आधारित वितरण के उपयोगकर्ता के रूप में, मुझे दृढ़ता से विश्वास है कि डॉट्स कनेक्ट करता है वे सभी चीजें हैं जो आपने अपने अनुरोध में मांगी हैं। कोई व्यक्ति एक महान कोडर हो सकता है, लेकिन सॉफ्टवेयर के लिए भद्दा देखभाल कर सकता है। उसी तरह, ऐसे लोग हैं जो भद्दे कोडर हैं जो सॉफ्टवेयर की बहुत देखभाल करते हैं।
इससे पहले कि मैं यहाँ आता, मैं एक शौकीन चावला पोस्टर था, गेंटू मंच पर । मुझे आखिरकार एहसास हुआ कि जब मैंने यहां आना शुरू किया, तो सभी के पास कुछ न कुछ प्रतिभा है, जिसका वे उपयोग कर सकते हैं। यह वही है जो वे इसके साथ करना चाहते हैं जो योगदानकर्ता अंतर बनाता है। हम में से कुछ महान लेखक हैं (मैं नहीं), इसलिए यदि आप किसी परियोजना में योगदान करना चाहते हैं, लेकिन आप कोड नहीं लिख सकते हैं या बग को ठीक नहीं कर सकते हैं, तो याद रखें कि महान लेखक महान दस्तावेज, या महान विकी लेख लिख सकते हैं ।
एक और कारण के लिए मानक है: एक समुदाय में, कुछ नियम इसके सदस्यों से अपेक्षित हैं । उस स्टेटमेंट को यहां भी फॉलो करें। यदि मैं एक फिक्स, पैच, एन्हांसमेंट आदि जमा करता हूं और कोई मानक नहीं हैं, तो पैच केवल उन परिस्थितियों में काम करेगा, जो मुझे महत्वपूर्ण हैं, अर्थात यदि मैं व्हिज़बैंग कंपाइलर 2.0 का उपयोग कर रहा हूं, और पैच को व्हिज़बैंग कंपाइलर 1.0 के विरुद्ध बनाया गया है, यह असफल हो जायेगी। चूँकि प्रयास एक समुदाय के लिए होता है, समुदाय को उम्मीद है कि अधिकांश स्थितियों में काम करने के लिए सब कुछ होगा, इसलिए सभी उपयोगकर्ताओं को कंपाइलर 2 में अपग्रेड करने के लिए मजबूर करने के बजाय, मैं एक मानक में निर्धारित कर सकता हूं:
यह पैकेज व्हिज़बैंग कंपाइलर 1.0 के साथ बैकवर्ड संगतता की अनुमति देता है
इस तरह, एक डेवलपर के रूप में, भद्दा कोडर या नहीं, मुझे पता है कि मुझे कंपाइलर संस्करण 1.0 के खिलाफ कम से कम परीक्षण या उपयोग करना चाहिए। दूसरी ओर एक उपयोगकर्ता के रूप में, मैं चुन सकता हूं कि मैं क्या करना चाहता हूं। अगर मैं दुखी हूं, तो मैं बग, या "यह सॉफ़्टवेयर बकवास का एक टुकड़ा है!" सबमिट करके पैच का अनुरोध कर सकता हूं और कुछ भी नहीं कर सकता। भले ही, उपयोगकर्ता और डेवलपर मानक को समझते हैं क्योंकि यह लिखा गया है।
अंतर को पाटने से उपयोगकर्ता के हिस्से पर किसी न किसी रूप में कार्रवाई होती है, और इसके लिए उन सभी चीजों की आवश्यकता होती है जो आपने मुझसे और अन्य ने टिप्पणी करने के लिए कहा है, और हमें उपयोगकर्ता समुदाय और उनकी सभी प्रतिभाओं पर भरोसा करना चाहिए जो उस अंतर को पाटते हैं। यदि आप योगदान करने वाले उपयोगकर्ताओं में से एक हैं, तो मैं आपकी सराहना करता हूं। आप में से जो लोग निष्क्रिय होना चुनते हैं, उनके लिए याद रखें कि यदि आप कुछ तय करना चाहते हैं, तो सक्रिय लोगों को आपके इनपुट की आवश्यकता है। इसलिए मैं आपको बता रहा हूं, बग सबमिट करने में शर्म न करें, या हमें बताएं कि हमें दस्तावेज़ीकरण अपडेट करने की आवश्यकता है, और यदि हम असभ्य हैं तो हमें बताएं, या किसी और को ढूंढें, जब तक कि आप अपनी विशेषज्ञता का क्षेत्र नहीं ढूंढते।
यह बहुत कुछ इस बात पर निर्भर करता है कि आपने किस तरह का कंपाइलर अपग्रेड किया था। यदि यह पर्याप्त हो गया है, तो संकलक द्वारा एबीआई में संभावित बदलावों के कारण सब कुछ * * पुनर्नवीनीकरण किया जाना चाहिए । कई मामलों में यह आवश्यक नहीं होगा, लेकिन अगर आपके पैकेज सी ++ 11 जैसी किसी चीज पर निर्भर करते हैं, तो आप समस्याओं में भाग सकते हैं - उदाहरण के लिए जीसीसी 4.7 या जीसीसी बगज़िला में एबीआई परिवर्तन के बारे में जेंटू समाचार देखें ।
*) "पुनर्नवीनीकरण" पर जोर दें ध्यान दें - यह निश्चित रूप से एक पायथन या पर्ल एप्लिकेशन को फिर से शुरू करने (पढ़ने के पुनर्निर्माण) के लिए बहुत मायने नहीं रखता है क्योंकि आपने एक सी संकलक को बदल दिया है। जब तक कि इसमें एक देशी घटक न हो (जो कि अच्छी तरह से हो सकता है)।