Skip to content

Instantly share code, notes, and snippets.

@jlblancoc
Last active October 10, 2023 03:09
Show Gist options
  • Save jlblancoc/99521194aba975286c80f93e47966dc5 to your computer and use it in GitHub Desktop.
Save jlblancoc/99521194aba975286c80f93e47966dc5 to your computer and use it in GitHub Desktop.
Installing gcc-7 & g++-7 in Ubuntu 16.04LTS Xenial

Run the following in the terminal:

Install the gcc-7 packages:

sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt update
sudo apt install g++-7 -y

Set it up so the symbolic links gcc, g++ point to the newer version:

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
                         --slave /usr/bin/g++ g++ /usr/bin/g++-7 
sudo update-alternatives --config gcc
gcc --version
g++ --version

# This one if you want the **all** toolchain programs (with the triplet names) to also point to gcc-7. 
# For example, this is needed if building Debian packages.
# If you are already are root (e.g. inside a docker image), remove the "sudo" below.
ls -la /usr/bin/ | grep -oP "[\S]*(gcc|g\+\+)(-[a-z]+)*[\s]" | xargs sudo bash -c 'for link in ${@:1}; do ln -s -f "/usr/bin/${link}-${0}" "/usr/bin/${link}"; done' 7
@osmeest
Copy link

osmeest commented Aug 22, 2018

In the past, I've made a script that was recreating the /usr/bin/gcc and friends as symbolic link to a specific version. This allowed to switch like you do with update-alternative. The end result was very similar.
This has however a caveat: since Spectre fixes have been introduced, compiling kernel drivers fails because some compiler options used in kernel compilation are not present in the test toolchain, making the compiled driver incompatible with the kernel.

@josephrocca
Copy link

Regarding switching gcc and g++ to reference the newly installed binary (gcc-8 in my case), this was helpful for me: https://askubuntu.com/a/26518/606179

@mikechen66
Copy link

Thanks for all of your answers. I have tried to install gcc-7.3 with the following commands. But I still get gcc 7.4.0. Can you provide a method only to install gcc 7.3.0?

$ sudo add-apt-repository ppa:jonathonf/gcc-7.3
$ sudo apt-get update
$ sudo apt-get install gcc-7 g++-7
$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7

After completion of the installation, I input the command of gcc --version and get the version of gcc 7.4.0.

Please see the message as follows

gcc ubuntu (Ubuntu 7.4.0-1ubuntu1~18.04) 7.4.0
............................................................................

I have Nvidia GeForce RTX 2060 which driver not supports gcc 7.4.0 but gcc 7.3.0. Please help me figure out the issue.

Note:

I also used the following commands to get gcc 7.4.0 rather than 7.3.0. So it is problem to install gcc 7.3.0.

$ sudo apt install build-essential
or
$ sudo apt install gcc

Thanks in advance,

Mike

@Mengmi
Copy link

Mengmi commented Jun 21, 2019

have you solved the issue above? I am trying to install rtx 2080 ti and nvidia driver also shows cc version check failure. I have to install gcc 7.3. instead of 7.4 but I dont know how

@songwenhuang
Copy link

This works perfect to install gcc and g++ 7.4.0

Thanks!

@thelittlekid
Copy link

Thanks! It worked and only got an error for g++
update-alternatives: error: alternative g++ can't be slave of gcc: it is a master alternative.
Need to configure gcc and g++ separately (https://askubuntu.com/questions/26498/how-to-choose-the-default-gcc-and-g-version)

@pan-22
Copy link

pan-22 commented Apr 6, 2020

I tried the listed steps but I got an error for adding ppa:
when I ran:
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
I get

gpg: keyring /tmp/tmpir2cfkik/secring.gpg' created
gpg: keyring /tmp/tmpir2cfkik/pubring.gpg' created
gpg: requesting key BA9EF27F from hkp server keyserver.ubuntu.com
Error: retrieving gpg key timed out.
gpg: keyserver timed out
gpg: keyserver receive failed: keyserver error

I tried this but got the same error:
sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa
Here is my linux distribution and kernel version:
Linux amax 4.15.0-45-generic #48~16.04.1-Ubuntu SMP Tue Jan 29 18:03:48 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
Can anyone help with it?

@Mizux
Copy link

Mizux commented Aug 14, 2020

FYI my docker version

FROM ubuntu:16.04 
...
# Install gcc 7
RUN apt update -qq \
&& apt install -yq software-properties-common \
&& add-apt-repository -y ppa:ubuntu-toolchain-r/test \
&& apt update -qq \
&& apt install -yq g++-7 \
&& apt clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Configure alias
RUN update-alternatives \
 --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 \
 --slave /usr/bin/g++ g++ /usr/bin/g++-7 \
 --slave /usr/bin/gcov gcov /usr/bin/gcov-7 \
 --slave /usr/bin/gcov-tool gcov-tool /usr/bin/gcov-tool-7 \
 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-7 \
 --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-7 \
 --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-7

with:

  • -y : auto confirm
  • -q: quiet mode (several increase quiet level)

@rancheng
Copy link

rancheng commented Nov 1, 2020

don't forget to update this executable:

update-alternatives --install /usr/bin/x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc /usr/bin/x86_64-linux-gnu-gcc-7

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment