如何在 Centos 7 上正确升级 gcc?

如何在 Centos 7 上正确升级 gcc?

我这样做是为了将 gcc 从 4.8.5 升级到 gcc 7:

sudo yum install centos-release-scl
sudo yum install devtoolset-7-gcc*
source /opt/rh/devtoolset-7/enable

这确实在当前 bash 终端中提供了 gcc 7。但是,如果我启动 python 终端,它会显示 gcc 仍然是 gcc 4.8.5,如下所示:

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/rh/devtoolset-7/root/usr/libexec/gcc/x86_64-redhat-linux/7/lto-wrapper
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,lto --prefix=/opt/rh/devtoolset-7/root/usr --mandir=/opt/rh/devtoolset-7/root/usr/share/man --infodir=/opt/rh/devtoolset-7/root/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-plugin --with-linker-hash-style=gnu --enable-initfini-array --with-default-libstdcxx-abi=gcc4-compatible --with-isl=/builddir/build/BUILD/gcc-7.3.1-20180303/obj-x86_64-redhat-linux/isl-install --enable-libmpx --enable-gnu-indirect-function --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux
Thread model: posix
gcc version 7.3.1 20180303 (Red Hat 7.3.1-5) (GCC)

在 Python 终端中:

$ python
Python 3.7.4 (default, Feb 24 2020, 16:34:54) 
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux
Type "help", "copyright", "credits" or "license" for more information.

另外,我注销并重新登录机器后,默认的 gcc 版本仍然是 4.8.5,我必须再次执行:

source /opt/rh/devtoolset-7/enable

我有两个问题:

  1. 启用gcc 7后,如何让python(3)版本的gcc 4.8.5也变成gcc 7?
  2. 有没有办法让整个 centos 系统默认使用 gcc 7?这可能会解决 1) 的问题。

答案1

我已经确认您可以在 centOS 7 上从默认版本 4.8 升级 gcc。

首先,我们需要安装“软件集合”才能访问一些社区软件包,包括gcc v7

  • sudo yum install -y centos-release-scl

接下来,我们要安装一个开发者工具集。根据你的需求,你可能需要不同的开发者工具集。这里我的目标是 7:

  • sudo yum install -y devtoolset-7

最后,您需要更改gcc 7为默认设置,使用该scl工具启动一个新的 shell 会话:

  • scl enable devtoolset-7 bash

答案2

回答只在当前 shell 中有效。scl实用程序会创建一个子 shell,并PATH正确设置变量,以便在新的子 shell 中,首先搜索已启用的软件集合。这些设置显然只会在当前 shell 中暂时生效。

为了使其永久有效,请将命令添加到source /opt/rh/devtoolset-7/enable用户的配置文件中(~/.bash_profile~/.bashrc对于基于 RHEL 的操作系统,如 CentOS 7)。然后,启动一个新 shell,您将拥有正确的工具。

在执行 之后scl enable devtoolset-7 bash,你需要执行exit两次才能退出打开的 shell 窗口,这说明该scl命令创建了一个子 shell。创建子 shell 可能会有副作用,所以不要把它放在~/.bashrc配置文件中,否则它会重复创建子 shell(非登录 shell),因为每个 shell 都会加载配置文件,导致死循环。把它放在 中~/.bash_profile,它只会被加载一次(对于登录 shell),但每次你都需要退出两次。

但对于开发目的来说,scl enable devtoolset-7 bash这是更可取的,因为您可以退出创建的子 shell,然后切换到同一软件的不同版本。


有关 Python 终端中 GCC 版本的更多详细信息:

CentOS 7 内置 Python 的版本信息:

[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.

用户安装的condaPython 的版本信息(通过):

[root@conda condabuilder]# conda activate jupyter
(jupyter) [root@conda condabuilder]# python
Python 3.10.9 | packaged by conda-forge | (main, Feb  2 2023, 20:20:04) [GCC 11.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.

因此,GCC 版本与系统的 GCC 无关。

相关内容