I used following steps on CentOS-7 and they worked fine for me:

yum install centos-release-scl
yum install devtoolset-10
scl enable devtoolset-10 bash

I used same flags which you used:

g++ -std=c++2a -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/dummy2.d" -MT"src/dummy2.o" -o "src/dummy2.o" "../src/dummy2.cpp"
Answer from Ashish Shirodkar on Stack Overflow
🌐
The Linux Cluster
thelinuxcluster.com › 2022 › 07 › 01 › compiling-gcc-10-4-0-on-centos-7
Compiling GCC-10.4.0 on CentOS-7 – The Linux Cluster
July 1, 2022 - Step 1: Download the TarBall version of GCC version. If you want to take look at all the available versions, you can take a look at http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/ For this blog entry, we will install GCC-10.4.0. ...
🌐
JWillikers
jwillikers.com › build-gcc-from-source-on-centos-7
Build GCC From Source on CentOS 7 - JWillikers
October 28, 2020 - Shell commands are provided in both Bash, the native shell on CentOS 7, and fish because it has standards. If you aren’t using the DNF package manager yet, grab that. ... Install the dependencies necessary to build GCC. sudo dnf -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make · Download the latest release, GCC 10.2.0 in this case, available here.
Discussions

c++ - How to enable later versions of GCC in eclipse CDT in CentOS 7 - Stack Overflow
My CentOS 7 machine has a default GCC version of 4.8.5. I want to use a higher version of GCC. So, I executed the following steps in a terminal: sudo yum install centos-release-scl sudo yum install devtoolset-10-gcc* scl enable devtoolset-10 bash More on stackoverflow.com
🌐 stackoverflow.com
In centos,how to switch to default gcc after switched to a higher version of gcc with devtoolset - Unix & Linux Stack Exchange
I want to install several gcc with different versions in centos. The default version of gcc in centos 6 is 4.9.3. So I use devtoolset install a higher version of gcc. Then I switch to the higher v... More on unix.stackexchange.com
🌐 unix.stackexchange.com
December 1, 2018
installation - How to Install gcc 5.3 with yum on CentOS 7.2? - Stack Overflow
Tested under CentOS 7.8.2003 for gcc 9.3 and gcc 10.1 More on stackoverflow.com
🌐 stackoverflow.com
How to install GCC/G++ 8 on CentOS - Stack Overflow
You can find more details for working ... so that gcc/g++ 8 will always be in your path. 2019-03-26T22:22:43.15Z+00:00 ... # yum install centos-release-scl No match for argument: centos-release-scl I'm using CentOS 8. Where can I get the packages installed here? 2020-01-16T12:22:08.223Z+00:00 ... It helps on CentOS 7. Just replace the 8 with 10 to install ... More on stackoverflow.com
🌐 stackoverflow.com
Top answer
1 of 2
16

I've confirmed that you can upgrade gcc from the default version 4.8 on centOS 7.

First, we need to install "Software Collections" in order to access some of the community packages including gcc v7

  • sudo yum install -y centos-release-scl

Next, we want to install a developer toolset. Depending on your needs, you may want a different devtoolset. Here I'm targeting 7:

  • sudo yum install -y devtoolset-7

Finally, you'll want to change over to gcc 7 as your default, launch a new shell session with the scl tool:

  • scl enable devtoolset-7 bash
2 of 2
1

Enable the software collection in the answer is only effective in the current shell. The scl utility will create a "child-shell" that set the PATH variables properly, so that in the new child-shell, the enabled software collections will be firstly searched. These settings obviously only take effective temporarily in the current shell.

To make it permanently effective, add the command, source /opt/rh/devtoolset-7/enable to the user's profile (~/.bash_profile or ~/.bashrc for RHEL based OS, like CentOS 7). Then, start a new shell and you will have the right tools available.

After execute scl enable devtoolset-7 bash, you will need to execute exit twice to exit the opened shell window, which verifies that the scl command created a new shell instance as a child process. There might be side-effect with creating a child-shell, so do not put this command in the ~/.bashrc profile, otherwise it will repeatedly create child-shell (non-login shell) as each shell will load the profile, resulting in a endless recursive loop. Put it in ~/.bash_profile, it will be loaded for only once (for the login shell), but you will need to exit twice every time.

But for development purpose, scl enable devtoolset-7 bash would be preferred, as you can exit the created child-shell, and then switch between different versions of the same software.


More details about the GCC version in python terminal:

The version info of the built-in Python in CentOS 7:

[root@conda condabuilder]# python
Python 2.7.5 (default, Nov 16 2020, 22:23:17) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

The version info of the user installed (via conda) Python on a system even without higher version of GCC installed:

[root@conda condabuilder]# conda activate jupyter
(jupyter) [root@conda condabuilder]# python -VV
Python 3.10.9 | packaged by conda-forge | (main, Feb  2 2023, 20:20:04) [GCC 11.3.0]

From the results, we can see that the GCC version contained in Python's version info is not related to the system's GCC. The system's default Python (2.7.5) should have been compiled with the GCC version distributed with CentOS 7, so the version info show the same GCC version. But for user installed python, the GCC version info actually depends on what version of GCC is used for building and packging the python binary.

🌐
LinuxHostSupport
linuxhostsupport.com › home › how to install gcc on centos 7
How To Install GCC on CentOS 7 | LinuxHostSupport
May 24, 2019 - In this tutorial, we will take a look at how to install GCC on CentOS 7. GCC or GNU Compiler Collection is released by the Free Software Foundation and as the name suggests, it is a very useful collection of programming compilers such as C, C++, Objective-C, Objective-C++, Fortran, Java, Go and Ada. GCC is an official compiler of the GNU operating system but also it is a standard compiler on many Unix operating systems such as Linux. Installing GCC on CentOS 7, is really an easy task and it shouldn’t take more than 10 minutes.
Find elsewhere
🌐
Medium
bipulkkuri.medium.com › install-latest-gcc-on-centos-linux-release-7-6-a704a11d943d
Install latest GCC on Centos Linux release 7.6
August 18, 2020 - sudo yum -y update sudo yum -y install bzip2 wget gcc gcc-c++ gmp-devel mpfr-devel libmpc-devel make gcc --version wget http://mirrors-usa.go-parts.com/gcc/releases/gcc-8.2.0/gcc-8.2.0.tar.gz tar zxf gcc-8.2.0.tar.gz mkdir gcc-8.2.0-build cd gcc-8.2.0-build ../gcc-8.2.0/configure --enable-languages=c,c++ --disable-multilib make -j$(nproc) sudo make install gcc --version
🌐
CyberITHub
cyberithub.com › install-gcc-and-c-compiler
Easy Steps to Install GCC(C and C++ Compiler) on CentOS 7 | CyberITHub
January 18, 2020 - Download from Repository and install gcc tool using yum install gcc command.
🌐
Psychz
psychz.net › client › kb › en › how-to-install-the-gcc-compiler-in-centos-7.html
How to install the GCC compiler in CentOS 7? ...
March 17, 2019 - Note: You need to log in to your CentOS 7 VPS via SSH as user root ... GCC can be easily installed from the official CentOS repositories. Run the following command to install GCC on your server ... Running transaction test Transaction test succeeded Running transaction Installing : cpp-4.8.5-36.el7.x86_64 1/5 Installing : kernel-headers-3.10.0-957.5.1.el7.x86_64 2/5 Installing : glibc-headers-2.17-260.el7_6.3.x86_64 3/5 Installing : glibc-devel-2.17-260.el7_6.3.x86_64 4/5 Installing : gcc-4.8.5-36.el7.x86_64 5/5 Verifying : glibc-devel-2.17-260.el7_6.3.x86_64 1/5 Verifying : gcc-4.8.5-36.el7.x86_64 2/5 Verifying : kernel-headers-3.10.0-957.5.1.el7.x86_64 3/5 Verifying : cpp-4.8.5-36.el7.x86_64 4/5 Verifying : glibc-headers-2.17-260.el7_6.3.x86_64 5/5 Installed: gcc.x86_64 0:4.8.5-36.el7
Call   800-933-1517
Address   611 Wilshire Blvd #300, 90017, Los Angeles,
🌐
nixCraft
cyberciti.biz › nixcraft › howto › centos › centos / rhel 7: install gcc (c and c++ compiler) and development tools
CentOS / RHEL 7: Install GCC (C and C++ Compiler) and Development Tools - nixCraft
April 5, 2024 - Explains how to install GNU C, C++ compiler and other development tools on a CentOS and RHEL (Red Hat Enterprise Linux) version 7.x server/workstation.
🌐
Raspberry Pi Forums
forums.raspberrypi.com › board index › hardware and peripherals › compute module
help : centos7.9 can't install gcc 10 - Raspberry Pi Forums
_CFLAGS_FOR_TARGET='' DEFS='-DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE_URL=\"\" -DLT_OBJDIR=\".libs/\"' DLLTOOL='armv7l-dlltool' DLLTOOL_FOR_BUILD='dlltool' DLLTOOL_FOR_TARGET='dlltool' ECHO_C='' ECHO_N='-n' ECHO_T='' EXEEXT='' EXPECT='expect' FLAGS_FOR_TARGET='' FLEX='flex' GCC_FOR_TARGET='cc' GCC_SHLIB_SUBDIR='' GDB_TK='' GDC_FOR_BUILD='gdc' GDC_FOR_TARGET='gdc' GFORTRAN_FOR_BUILD='gfortran' GFORTRAN_FOR_TARGET='gfortran' GNATBIND='no' GNATMAKE='no' GOC_FOR_BUILD='gccgo' GOC_FOR_TARGET='gccgo' INSTALL_DATA='${INS
Top answer
1 of 4
7

The version of gcc that's distributed with CentOS 6 is actually 4.4.7.

You can install as many versions of gcc either by installing devtoolset-# via yum or by compiling then from source.

The first way is the easiest. Make sure that you are installing the devtoolset packages via the scl repo. I figure that you already did as you have installed one already but in case you didn't:

yum install centos-release-scl

You can then use the below command to set the gcc version to whichever one you want. Using 5 for this example and assuming that your shell is bash:

scl enable devtoolset-5 bash

If you want to change to 6:

scl enable devtoolset-6 bash

If you want to change back to the default then any of the following will work assuming bash is your shell:

bash

source ~/.bash_profile

The first will start a new shell session and set any aliases/variables/commands in ~/.bashrc. The second will set it with the variables/commands in ~/.bash_profile. (Without the devtoolset enabled).

You can even put scl enable devtoolset-5 bash, for example, in ~/.bashrc or ~/.bash_profile so that it sets the gcc version to one of the devtoolset versions at login. To go back to the system default if you use this method, comment the line out in ~/.bashrc or ~/.bash_profile and then run bash or source ~/.bash_profile, respectively. That will start a new shell session with everything in one of those shell init files except the scl enable command that you commented out. The only downside is that any variables that you've set via the export command will no longer be there as the shell session will be new.

2 of 4
1

I'm no expert on scl but I do have years of linux experience.

When you do scl enable devtoolset-9 bash what is happening is that a new bash is started and a new environment is set up.

You can see the new bash process by:

  • first starting a new shell and checking your shell's pid via echo $$
  • second enabling the new devtoolset via scl enable devtoolset-9 bash
  • then check your pid again via echo $$
  • for bonus points you can do pstree -p to see that your new bash pid has a parent pid of your old bash process

So to finally answer your question: To return to the default g++ compiler all you need to do is exit your current bash process and then you should have the old g++ compiler.

Important note regarding your ~/.bashrc:

  • my solution won't work if you have somehow modified your ~/.bashrc
  • i.e. if you have something in there that always does the scl enable devtoolset-9
  • see the other solutions on this page because the other solutions talk more in-depth about your ~/.bashrc and how to modify or unmodify it
🌐
GitHub
github.com › pypa › manylinux › issues › 1141
Install devtoolset-10 for manylinux2014 · Issue #1141 · pypa/manylinux
July 19, 2021 - I have noticed that gcc 10 is now available via devtoolset-10 in CentOS 7.
Author   pypa
Top answer
1 of 6
233

Update:
Often people want the most recent version of gcc, and devtoolset is being kept up-to-date, so maybe you want devtoolset-N where N={4,5,6,7...}, check yum for the latest available on your system). Updated the cmds below for N=7.

There is a package for gcc-7.2.1 for devtoolset-7 as an example. First you need to enable the Software Collections, then it's available in devtoolset-7:

sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
which gcc
gcc --version
2 of 6
78

Update: Installing latest version of gcc 9: (gcc 9.3.0) - released March 12, 2020:

Same method can be applied to gcc 10 (gcc 10.1.0) - released May 7, 2020

Download file: gcc-9.3.0.tar.gz or gcc-10.1.0.tar.gz

Compile and install:

//required libraries: (some may already have been installed)
dnf install libmpc-devel mpfr-devel gmp-devel

//if dnf install libmpc-devel is not working try:
dnf --enablerepo=PowerTools install libmpc-devel

//install zlib
dnf install zlib-devel*

./configure --with-system-zlib --disable-multilib --enable-languages=c,c++

make -j 8 <== this may take around an hour or more to finish
              (depending on your cpu speed)

make install

Tested under CentOS 7.8.2003 for gcc 9.3 and gcc 10.1

Tested under CentOS 8.1.1911 for gcc 10.1 (may take more time to compile)

Results: gcc/g++ 9.3.0/10.1.0

Installing gcc 7.4 (gcc 7.4.0) - released December 6, 2018:

Download file: https://ftp.gnu.org/gnu/gcc/gcc-7.4.0/gcc-7.4.0.tar.gz

Compile and install:

//required libraries:
yum install libmpc-devel mpfr-devel gmp-devel

./configure --with-system-zlib --disable-multilib --enable-languages=c,c++

make -j 8 <== this may take around 50 minutes or less to finish with 8 threads
              (depending on your cpu speed)


make install

Result:

Notes:

1. This Stack Overflow answer will help to see how to verify the downloaded source file.

2. Use the option --prefix to install gcc to another directory other than the default one. The toplevel installation directory defaults to /usr/local. Read about gcc installation options

🌐
idroot
idroot.us › home › how to install gcc on centos 7
How To Install GCC on CentOS 7 - idroot
July 23, 2024 - In this tutorial we will show you how to install GCC Compiler on CentOS 7 Linux, as well as some extra required package by GCC
🌐
Reddit
reddit.com › r/linuxquestions › beginner with centos. what is best way to upgrade gcc?
r/linuxquestions on Reddit: Beginner with Centos. What is best way to upgrade GCC?
October 28, 2022 -

Edit: What happened? When I went to download centos I mistakenly understood centos 7 as being the most recent stable version. Original post below:

Ok, I have only used the mint distro as of yet (for about a year now). I wanted to start getting to know other distros so I repaired an older funky pc's power supply and changed out the windows 7 on it for Centos with Gnome desktop just yesterday. So Centos is new to me and mint has been my experience (but I am still a novice with it).

I checked out the GCC and it's version 4.8.5 . On my mint laptop I was able to install version 10.3.0 through the apt package manager. The search results I get from using yum though do not seem to spit out anything similar as far as I can tell. And the google searches I do seem to all point towards installing from source.

But a friend of mine the other day when discussing how I used my laptop in mint was very emphatic that I should avoid as much as possible installing anything from source that was available already through a package manager, saying that when things later become updated it is much safer and less of a mess to have the package manager handle the changes.

So my noob question is this... Does that type of thinking not apply to the Centos distro? Or is the purpose of Centos less intended for developers? Or something else?

In the end I am too ignorant in this current situation to really know what I am ignorant of so bottom line question is:

In Centos 7 What is the most recommended way to upgrade GCC?

Thanks

Top answer
1 of 6
6
Centos 7 The latest stable release is 8 and I think Stream is on 9, is there a reason you're using a decade-old release? You could try installing distrobox (or toolbox) and set up a Fedora container for your compiler. This way it won't conflict with anything and you avoid dependency hell. You'll still need to upgrade to 8 at least though, since 7 only ships an old version of podman that probably doesn't even support rootless containers.
2 of 6
2
Why are you using CentOS 7, it was release on July 7, 2014? I currently don't know what GCC version CentOS 8 (stream) has, but CentOS 9 stream has 11.3.1-2 currently. I guess until CentOS 7 EOL there won't be any big GCC version updates, as CentOS is a stable distribution, compared to mint which gets bigger version updates way more often. CentOS (was) downstream from RHEL, which is intended to run on professional servers for years on end. Thus, it "only" gets security updates, but no big / breaking version bumps. For servers, stability is key, once they're set up, they are supposed to run until the OS goes EOL (or the server is faded out), in this case 10 years. Mint is based on Ubuntu which is also mostly stable, but every spring and fall there is a new version (Ubuntu 21.10 (fall 2021), Ubuntu 22.04(spring 2022), Ubuntu 22.10(fall 2022), etc.) thus mint is at most on a half year old GCC version. On the other end of the spectrum there are distros like arch and openSUSE Tumbleweed which are so-called "rolling releases". They only have one version, the current one. And Packages are always kept up to date, as soon as the developers release a new one. Should you compile a new GCC version? Probably not, too much potential for things to break, except you want to learn about how Linux works... Like this Guy: https://reddit.com/r/linux/comments/ye9h57/latest_gentoo_release_running_an_11_year_old/
🌐
GitHub
github.com › llvm › llvm-project › issues › 54756
LLVM 14 breaks using lld with devtoolset-10 gcc on CentOS 7 · Issue #54756 · llvm/llvm-project
April 5, 2022 - Commit 815a120 removed support for --no-add-needed. However, this option is added by devtoolset-10 gcc on CentOS7: [sgiesecke@SDP_DevVM-sgiesecke gcc]$ scl enable devtoolset-10 -- gcc test.cc -fuse-ld=lld -B /bin -v Using ...
Author   llvm