इसलिए मैंने जीसीसी-4.4 और जीसीसी-4.3 (जी++के लिए समान) स्थापित किया है । अब जहां तक मुझे याद है कि उबंटू में एक उपकरण है जो आपके लिए सिम्लिंक सेट करता है यदि आप इसे बताते हैं कि आपको कौन सा संस्करण चाहिए । हालांकि यह नवीनतम संस्करण में काम नहीं करता है, जो मुझे निराशाजनक लगता है ।
root@nexus:~# update-alternatives --config gccupdate-alternatives: error: no alternatives for gcc.root@nexus:~# update-alternatives --config ccThere is only one alternative in link group cc: /usr/bin/gccNothing to configure.root@nexus:~# dpkg -l | grep gcc | awk '{print $2}'gccgcc-4.3gcc-4.3-basegcc-4.3-multilibgcc-4.4gcc-4.4-basegcc-4.4-multilibgcc-4.5-basegcc-multiliblib32gcc1libgcc1
ऐसा लगता है कि दोनों gcc-4.3 और gcc-4.4 बिल्ड-आवश्यक स्थापित करने के बाद स्थापित हैं । हालाँकि, हम निम्नलिखित पैकेजों को स्पष्ट रूप से स्थापित कर सकते हैं:
प्रतीकात्मक लिंक cc और c++ डिफ़ॉल्ट रूप से स्थापित हैं । हम इसके लिए प्रतीक लिंक स्थापित करेंगे gcc और g++, फिर लिंक cc और c++ को gcc और g++ क्रमशः। (ध्यान दें कि 10, 20 और 30 विकल्प प्रत्येक विकल्प के लिए प्राथमिकताएं हैं, जहां एक बड़ी संख्या एक उच्च प्राथमिकता है । )
ठीक है, इसलिए वह हिस्सा काफी सरल है । मुश्किल हिस्सा यह है कि जब आप कमांड जीसीसी जारी करते हैं तो यह वास्तव में एक सिबोलिक लिंक होता है जिस पर आप जीसीसी का कभी भी संस्करण उपयोग कर रहे हैं । इसका मतलब यह है कि हम जीसीसी से जीसीसी के जो भी संस्करण चाहते हैं, हम एक प्रतीकात्मक लिंक बना सकते हैं ।
क्या यह वास्तव में वांछनीय है? के बीच एबीआई परिवर्तन हैं gcc संस्करणों. एक संस्करण (जैसे संपूर्ण ऑपरेटिंग सिस्टम) के साथ कुछ संकलित करना और फिर किसी अन्य संस्करण के साथ कुछ और संकलित करना, संघर्ष का कारण बन सकता है ।
उदाहरण के लिए, कर्नेल मॉड्यूल को हमेशा उसी संस्करण के साथ संकलित किया जाना चाहिए gcc कर्नेल को संकलित करने के लिए प्रयुक्त । इसे ध्यान में रखते हुए, यदि आपने मैन्युअल रूप से सिमलिंक को बीच में बदल दिया है /usr/bin/gcc और उबंटू के आपके संस्करण में उपयोग किया जाने वाला संस्करण, भविष्य के डीकेएमएस-निर्मित मॉड्यूल गलत का उपयोग कर सकते हैं gcc संस्करण।
यदि आप सिर्फ एक अलग संस्करण के साथ चीजों का निर्माण करना चाहते हैं gcc, यह काफी आसान है, यहां तक कि मेकस्क्रिप्ट के साथ भी । उदाहरण के लिए, आप के संस्करण में पास कर सकते हैं gcc में CC पर्यावरण चर:
CC="gcc-4.5" ./configureCC="gcc-4.5" make
आपको मेक कमांड पर इसकी आवश्यकता नहीं हो सकती है (स्क्रिप्ट कॉन्फ़िगर करें आमतौर पर इसे खींचते हैं) लेकिन यह चोट नहीं पहुंचाता है ।
यह मानता है कि आपने पहले संस्करण स्थापित किया है, उदाहरण के लिए:
sudo apt install gcc-4.9 g++-4.9
मूल:
और यहां उन लोगों के लिए एक-लाइनर है जो आलसी हैं, बस अपने इच्छित संस्करण के अंत में संख्या बदलें । यह परिवर्तन के लिए कर देगा जीसीसी और / या जी++
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
इस उदाहरण में मैंने 4.9 पर स्विच किया
इस उदाहरण में कोई त्रुटि जांच नहीं है और क्या नहीं है, इसलिए आप यह जांचना चाहेंगे कि इसे चलाने से पहले क्या चलाया जाएगा । बस जोड़ें इको इससे पहले सुडो. पूर्णता के लिए मैं चेक लाइन भी प्रदान करता हूं:
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs bash -c 'for link in ${@:1}; do echo sudo ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 4.9
एलएस-एलए / यूएसआर / बिन/ सभी फाइलों को सूचीबद्ध करता है / यूएसआर / बिन
| पाइप (भेजें) अगले आदेश के लिए उत्पादन
ग्रेप-ऑप प्रति पंक्ति खोज रेगेक्स से मेल खाता है । o केवल परिणाम दिखाता है पूरी मिलान वाली रेखा नहीं । P ग्रेप को पर्ल-रेगेक्स का उपयोग करने के लिए कहता है । मैं यहां रेगेक्स में नहीं जाऊंगा, अगर आप चाहते हैं तो इस पर पढ़ें ।
एक्सएआरजीएस सीधे शब्दों में कहें, यह उन परिणामों को इकट्ठा करता है जो इसे पाइप किए जाते हैं और उन सभी को अंत तक भेजते हैं । यानी एक्सआरजीएस के बाद कमांड के लिए
बैश खैर, यह बैश है । द c ध्वज इसे स्ट्रिंग को कमांड के रूप में उपयोग करने के लिए कहता है । इस उदाहरण में यह भेजे गए तर्कों पर लूप करता है एक्सएआरजीएस पहले (0 वें) तर्क को छोड़ कर, इस मामले में लूप रुक जाता है 4.9. लिंक को बदलने के लिए लूप में 0 वें तर्क का उपयोग किया जाता है ।
एलएन-एस-एफ द s ध्वज एक प्रतीकात्मक लिंक बनाता है, f जरूरत पड़ने पर पहले अनलिंक करने के लिए मजबूर करता है ।
जैसा कि @ओली ने समझाया, यह एक बुरा विचार है । डेबियन-डेवेल मेल सूची: "मुझे नहीं लगता कि संस्करण के लिए विकल्पों का उपयोग किया जाना चाहिए । उदाहरण के लिए, हम जीसीसी के लिए विकल्पों का उपयोग नहीं करते हैं, न ही पायथन के लिए । "Re: llvm-defaults vs update alternatives