Downloaded g++ 4.8 from the PPA but can't set it as default?
I have downloaded g++ 4.8 on Ubuntu 12.10 by doing:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install g++-4.8
but when I do:
sudo update-alternatives --config g++
to switch g++ versions it says:
update-alternatives: error: no alternatives for g++.
However if I do:
g++ --version
it says:
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.
How do I set my g++ 4.8 installation to be the default g++?
Solution 1:
You need to let update-alternatives
to know that you have 2 C++ compilers, create a record for each one, and then configure which one you want to use. This is done with the following:
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++
From this point forward, the only thing required when switching compilers is this command:
sudo update-alternatives --config g++
See man update-alternatives
for more info.
Source: How to use multiple instances of gcc?
Solution 2:
First of all, you must discover where are your 4.8 binaries of all the tools:
$ 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
So, we have all our binaries, now lets see if some symlinks are available for such binaries:
$ 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
As we can see, only cpp
, g++
and gcc
has symbolic links. We have two options here.
Symlinking
We replace the symlinks with ours, removing the actuals first:
sudo rm /usr/bin/cpp /usr/bin/gcc /usr/bin/g++
Then creating ours
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++
To revert it back use the same commands but with 4.7 or 4.6 instead
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++
Solution 3:
This is the great description and step-by-step instruction how to create and manage master and slave (gcc and g++) alternatives.
Shortly, it's
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