177

I want to compile my program with the latest version of gcc.

Ubuntu 14.04 comes with gcc 4.8.2, however there's 4.9.0 available, moreover, I see that it is available as a package: gcc-4.9. I tried to install it

sudo apt-get install gcc-4.9

but it says

Reading package lists... Done
Building dependency tree       
Reading state information... Done
Note, selecting 'gcc-4.9-base' for regex 'gcc-4.9'
gcc-4.9-base is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

Looks like it is already installed, just not as the default one? How do I utilize it to build my program?

5
  • If you want to install gcc-4.8 , you need to use sudo apt-get install gcc-4.8. gcc-4.9 ,gcc-4.8 , gcc-4.7, gcc-4.6 all are in Ubuntu main repo.
    – user224082
    May 16, 2014 at 1:18
  • 1
    @Dumindu But how do I use gcc-4.9 specifically? May 16, 2014 at 2:33
  • Uninstall others and install 4.9.
    – user224082
    May 16, 2014 at 3:55
  • 2
    @Dumindu Wait, did you just tell me to do what I just did? It is not working. May 16, 2014 at 17:53
  • switch to root user : sudo su - goto /usr/bin then run ls -l gcc* and post your output. then I'll post your answer. Aug 14, 2014 at 9:46

5 Answers 5

237

The best way to correctly install gcc-4.9 and set it as your default gcc version use:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9 g++-4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.9

The --slave, with g++, will cause g++ to be switched along with gcc, to the same version. But, at this point gcc-4.9 will be your only version configured in update-alternatives, so add 4.8 to update-alternatives, so there actually is an alternative, by using:

sudo apt-get install gcc-4.8 g++-4.8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 60 --slave /usr/bin/g++ g++ /usr/bin/g++-4.8

Then you can check which one that is set, and change back and forth using:

sudo update-alternatives --config gcc

If you have an issue with update-alternatives gcc priority 60 not being higher than previous versions installed you can use the previous update-alternatives --config gcc command to check installed versions and use:

sudo update-alternatives --remove gcc

Or:

sudo update-alternatives --remove-all gcc

NOTE: You could skip installing the PPA Repository and just use /usr/bin/gcc-4.9-base but I prefer using the fresh updated toolchains.


For GCC 5.X or 6, the packages (and correspondingly, the commands) are just called gcc-5, gcc-6, etc. This is due to the change in GCC's version scheme, where 5.1 is the first GCC 5 release, and future 5.X releases are for bug fixes.

17
  • Thanks for the edit @muru ...like I said below, I was up for about 3 days very tired and update-alternatives does requires sudo and I think I forgot the (--) before slave. :) So, Thank you.
    – SudoSURoot
    Feb 15, 2015 at 17:16
  • 4
    This works perfectly. Also, substitute 5 in for 4.9 to get GCC 5 working on Ubuntu. (My development team now runs both 4.9 and 5 alongside each other following your method.) Thank you, and +1! Nov 6, 2015 at 16:52
  • 2
    @hwat It should work for gcc-6 now.
    – edwinksl
    Jun 5, 2016 at 2:38
  • 1
    This has helped me several times, but I always forget - make sure to apply the same solution to other utilities in the GNU compiler collection you may use! GCOV for example will complain about a version mismatch if you do not, possibly producing incorrect data.
    – Toby
    Nov 10, 2016 at 10:39
  • 1
    Confirmed working for gcc-10
    – Sterls
    Sep 28, 2020 at 16:58
46

Ultimate mega master compatibility table

OK let's do this:

                  GCC                clang
        +-------------------------+--------------------------------+
        | 13 12 11 10 9 8 7 6 5 4 | 16 15 14 13 12 11 10 9 8 7 6 5 |
+-------+-------------------------+--------------------------------+
| 23.10 |  D  M M  M  M           |  D  M  M  M                    |
| 23.04 |  M  D  M  M M           |  M  D  M  M                    |
| 22.10 |     D  M  M M           |     D  M  M                    |
| 22.04 |     M  D  M M           |        D  M  M  M              |
| 21.10 |        D  M M M         |           D  M  M  M M         |
| 21.04 |        M  D M M M       |              D  M  M M         |
| 20.10 |           D M M M       |                 D  M M M M M   |
| 20.04 |           P D M M       |                    D M M M M   |
| 19.10 |             D M M       |                                |
| 19.04 |             M D M M     |                                |
| 18.10 |               D M M M   |                                |
| 18.04 |           P P M D M M   |                      M M M D M |
| 16.04 |             P P P P D M |                                |
+-------+-------------------------+--------------------------------+

Blank spaces on the table mean either "no package available" or "I didn't bother to check". Notably I've not been looking into PPA packages too thoroughly. Edits accepted.

All the questions:

How to set a non-default GCC as the default?

E.g., you installed /usr/bin/gcc-7 but you want to use that instead of /usr/bin/gcc when you run gcc main.c.

Use sudo update-alternatives as mentioned in other answers: https://askubuntu.com/a/581497/52975 It creates the required symlinks for you.

See also: What exactly does `update-alternatives` do?

How to build your own toolchain from source

If even the PPA is not old/new enough for you, see this:

Older GCC version questions

9
25

Use the Toolchain Test Builds PPA:

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9

I don't think GCC 4.9 is fully available for Ubuntu 14.04 yet. The base package (gcc-4.9-base) and the GCC Go 4.9 compiler (gccgo-4.9) are available, but the other frontends are not. I don't know why.

5
  • 1
    @SudoSURoot it may or may not be set as default, that's not my concern (there are other posts dealing with that). However, that GCC 4.9's C and C++ frontends can be installed on 14.04 purely from the official repositories is patently false, since the gcc-4.9-base package does not and will not contain a binary frontend.
    – muru
    Feb 14, 2015 at 22:18
  • You are correct about the base package. As you'll see in my answer, I used the PPA. I posted the comment first, then answered the question as stated, from question... Because simply adding the PPA and installing 4.9 does not enable it which is needed to "use gcc 4.9". I should have deleted the comment after I answered the question. I apologize. My answer is what should be focused on. I jumped to conclusions... and commented to fast. I am actually pretty new with using 14.04 since I got me dedicated server. I'm gong to make sure I didn't down vote and I'll fix it if I did.
    – SudoSURoot
    Feb 14, 2015 at 22:28
  • @SudoSURoot alright. Even so, unless OP has a problem with calling gcc-4.9 or g++-4.9 instead of gcc or g++, I will stick to not updating the alternatives.
    – muru
    Feb 14, 2015 at 22:31
  • I totally understand. I build Android systems though, which uses a lot of $(which gcc) and $(which g++) etc... So I always have to have defaults set to the version I want to use. Some of my kernel code wouldn't compile with host gcc-4.8 so I had to update. I just repeated what worked for me. Thanks for reminding me though... Like I said in my edit, from last comment, I may have down voted, prematurely, if so I'll fix it. I had been up for 2 or 3 days working on my kernel source when I posted these. Everyone has their ways... I just found the more thorough my answer the less questions I g
    – SudoSURoot
    Feb 14, 2015 at 22:40
  • The latest package is gcc-7 ATM
    – Elder Geek
    Nov 29, 2016 at 17:50
9

Ubuntu 16.04 and later

You can already install gcc 7.0 in Ubuntu 18.04 from the default repositories. To install gcc-7 in Ubuntu 17.10, 18.04 and 18.10 open the terminal and type:

sudo apt install gcc-7 

To install gcc-8 in Ubuntu 18.04 and later open the terminal and type:

sudo apt install gcc-8

To install gcc-9 in Ubuntu 19.04 and later open the terminal and type:

sudo apt install gcc-9

You can install gcc-7 in Ubuntu 16.04 from ppa:jonathonf/gcc-7.1.

sudo add-apt-repository ppa:jonathonf/gcc-7.1  
sudo apt update  
sudo apt install gcc-7  

You can install gcc-8 in Ubuntu 16.04 from ppa:jonathonf/gcc-8.0.

sudo add-apt-repository ppa:jonathonf/gcc-8.0  
sudo apt update  
sudo apt install gcc-8  

Multiple versions of gcc can be installed alongside each other. You can change the default gcc version by using the update-alternatives command to determine which actual file is referenced by a generic name, for example which actual file is referenced by gcc. For more information see the answers to this question: How to change the default GCC compiler in Ubuntu?.

4

To call gcc 4.9 specifically, use gcc-4.9 at the command prompt.

All the gcc versions you have installed can be called individually by adding a hyphen and the version number at the end of gcc. In your case, gcc-4.8 and gcc-4.9 should be available. In a terminal, type gcc- (note the hyphen) and the push tab twice to see if there are any other versions installed.

Note that the default gcc is likely still 4.8. (Use gcc -v to verify this.) Unfortunately changing the default is not trivial if you installed gcc-4.9 from the default repository as it did not add a update-alternatives entry. If you are interested in how to change the default, see answers to this this question.

4
  • How do I make a project relying on makefile and possibly other build infrastructure build with gcc-4.9 instead of gcc? Jul 13, 2014 at 13:41
  • 1
    The best way to make sure gcc-4.9 is used across build systems is to change the default gcc. Follow the link I provided in my answer for how to do this. Alternatively you could create a symbolic link, though I recommend against this except as last resort since the package manager might complain when updating gcc. If you insist: sudo rm /usr/bin/gcc; sudo ln -s /usr/bin/gcc-4.9 /usr/bin/gcc. To revert to gcc-4.8 default, just replace gcc-4.9 with gcc-4.8. You may have to do this with g++ and other GNU compilers as well. Jul 13, 2014 at 20:29
  • GCC 4.9 is not available in Ubuntu 14.04 (except for the GCC Go compiler), so while this answer will probably work in Ubuntu 14.10, it doesn't help now. :-) Aug 2, 2014 at 17:43
  • Actually it is available in Ubuntu 14.04, though it may have been a mistake: packages.ubuntu.com/trusty/gcc-4.9-base. I have been using it since April. Aug 3, 2014 at 11:46

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .