PPA से g ++ 4.8 डाउनलोड किया गया, लेकिन इसे डिफ़ॉल्ट रूप से सेट नहीं किया जा सकता है?


15

मैंने Ubuntu 12.10 पर g ++ 4.8 डाउनलोड किया है:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8

लेकिन जब मैं करता हूं:

sudo update-alternatives --config g++

इसे बदलने के लिए g ++ संस्करण कहते हैं:

update-alternatives: error: no alternatives for g++.

हालाँकि अगर मैं करता हूँ:

g++ --version

इसे कहते हैं:

g++ (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

मैं डिफ़ॉल्ट g ++ होने के लिए अपना g ++ 4.8 इंस्टॉलेशन कैसे सेट करूं?

जवाबों:


11

सबसे पहले, आपको पता होना चाहिए कि आपके सभी टूल में से 4.8 बायनेरी कहां हैं:

$ which gcc-4.8
/usr/bin/gcc-4.8
$ which g++-4.8
/usr/bin/g++-4.8
$ ls /usr/bin/*-4.8
/usr/bin/cpp-4.8         /usr/bin/x86_64-linux-gnu-cpp-4.8
/usr/bin/g++-4.8         /usr/bin/x86_64-linux-gnu-g++-4.8
/usr/bin/gcc-4.8         /usr/bin/x86_64-linux-gnu-gcc-4.8
/usr/bin/gcc-ar-4.8      /usr/bin/x86_64-linux-gnu-gcc-ar-4.8
/usr/bin/gcc-nm-4.8      /usr/bin/x86_64-linux-gnu-gcc-nm-4.8
/usr/bin/gcc-ranlib-4.8  /usr/bin/x86_64-linux-gnu-gcc-ranlib-4.8
/usr/bin/gcov-4.8

इसलिए, हमारे पास हमारे सभी बायनेरिज़ हैं, अब देखते हैं कि इस तरह के बायनेरिज़ के लिए कुछ सहानुभूति उपलब्ध हैं:

$ cd /usr/bin
$ ls -l gcc* cpp g++
lrwxrwxrwx 1 root root      7 sep 18 14:02 cpp -> cpp-4.7
lrwxrwxrwx 1 root root      7 abr 22  2013 g++ -> g++-4.7
lrwxrwxrwx 1 root root      7 sep 18 14:02 gcc -> gcc-4.7

जैसा कि हम देख सकते हैं, केवल cpp, g++और gccप्रतीकात्मक लिंक हैं। हमारे यहां दो विकल्प हैं।

Symlinking

हम पहले वास्तविक को हटाते हुए सिम्लिंक को अपने साथ प्रतिस्थापित करते हैं:

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++

फिर हमारा निर्माण

sudo ln -s /usr/bin/cpp-4.8 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

इसे वापस करने के लिए एक ही कमांड का उपयोग करें लेकिन इसके बजाय 4.7 या 4.6 के साथ

sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/cpp-4.7 /usr/bin/cpp
sudo ln -s /usr/bin/gcc-4.7 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.7 /usr/bin/g++

जब मैंने किया: ls -l gcc * cpp g ++ यह लौट आया: ls: gcc तक नहीं पहुँच सकता *: कोई ऐसी फ़ाइल या निर्देशिका ls: cpp तक नहीं पहुँच सकता: कोई ऐसी फ़ाइल या निर्देशिका ls: g तक नहीं पहुँच सकती ++: ऐसी कोई फ़ाइल या निर्देशिका
user997112

कोई माफी की आवश्यकता नहीं है :) एक बार जब मैं इसे हटाए जाने वाले फ़ंक्शन को कॉल करता हूं, लेकिन जब मैं "हमारी" सहानुभूति बनाने के लिए जाता हूं तो यह कहता है: sudo ln -s -T / usr / bin / cpp /usr/bin/cpp-4.8 ln: विफल प्रतीकात्मक लिंक बनाने के लिए `/
/r/bin/cpp-4.8

(मैंने rm कमांड को दो बार कॉल किया, इसलिए दूसरी बार इसकी पुष्टि / शिकायत की कि मौजूदा लिंक वास्तव में हटाए गए थे)
user997112

3
यह एक भयानक विचार है । ऐसे कई कार्यक्रम हैं जो gccकर्नेल मॉड्यूल को संकलित करने के लिए उपयोग करते हैं और उनमें से कुछ (जैसे एनवीडिया) चुपचाप दुर्घटनाग्रस्त हो जाएंगे, जब gccवे कॉल नहीं करेंगे, जिसके साथ कर्नेल संकलित किया गया था।
nbubis

1
@nbubis अच्छी तरह से, सवाल यह है कि "मैं अपने g ++ 4.8 इंस्टॉलेशन को डिफ़ॉल्ट g ++ कैसे सेट करूं?" दूसरी ओर, आप किस विकल्प का प्रस्ताव कर सकते हैं?
ब्रिअम

16

आपको यह जानने की जरूरत है update-alternativesकि आपके पास 2 C ++ कंपाइलर हैं, हर एक के लिए एक रिकॉर्ड बनाएं और फिर कॉन्फ़िगर करें कि आप किसका उपयोग करना चाहते हैं। यह निम्नलिखित के साथ किया जाता है:

sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6.3 60
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 40
sudo update-alternatives --config g++ 

इस बिंदु से आगे, कंपाइलरों को स्विच करते समय केवल एक चीज की आवश्यकता होती है:

sudo update-alternatives --config g++

man update-alternativesअधिक जानकारी के लिए देखें ।

स्रोत: जीसीसी के कई उदाहरणों का उपयोग कैसे करें?


@Braiam यह किसी भी पैकेज के साथ उसी तरह से किया जा सकता है।
रादु राईडेनु

3
क्या कोई 60 और 40 पर विस्तार कर सकता है? Ive ने इसे बहुत सी जगहों पर देखा
user997112

@ user997112 मैं आपको आदमी को पढ़ने के लिए सुझाव देता हूं, लेकिन, अगर आपको 70 और 30 पसंद हैं, तो 70 और 30 का उपयोग करें ...
रादु रएडेनु

1
@ user997112 ये प्राथमिकता संख्याएं हैं, और केवल उपयोग के समय प्रासंगिक हैं - ऑटो। आप कुछ उदाहरण देख सकते हैंupdate-alternatives --display editor
Braiam

2
12.04 पर मुझे: अद्यतन-विकल्प: त्रुटि: वैकल्पिक जी ++ मास्टर नहीं हो सकता है: यह gcc का गुलाम है
rickfoosusa

9

यह महान विवरण और चरण-दर-चरण निर्देश है कि मास्टर और गुलाम (gcc और g ++) विकल्प कैसे बनाएं और प्रबंधित करें।

शीघ्र ही, यह

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.7 
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8 
sudo update-alternatives --config gcc

उबंटू पूछने के लिए आपका स्वागत है! जब भी यह सैद्धांतिक रूप से प्रश्न का उत्तर दे सकता है, तो यहां उत्तर के आवश्यक भागों को शामिल करना और संदर्भ के लिए लिंक प्रदान करना बेहतर होगा
स्ट्रोमविरक्स

आप सही हे। मैंने आवश्यक भाग
एंटोन के

1
उस गुलाम सामान के साथ मेरा दिन बचाया। tx
लेनार्ट रोलैंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.