我这样做是为了将 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
我有两个问题:
- 启用gcc 7后,如何让python(3)版本的gcc 4.8.5也变成gcc 7?
- 有没有办法让整个 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.
用户安装的
conda
Python 的版本信息(通过):[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 无关。