通过添加 GCC 7 和 GCC 15 到 alternatives 实现 gcc 版本的自动切换
以 openSUSE Leap 15.6 为例, 现在已经同时安装了 7.5.0 和 15 两个版本. 可以在 /usr/bin 目录下键入命令 ls -l gcc* 查看
haifeng@localhost:/usr/bin> ls -l gcc*
lrwxrwxrwx 1 root root 5 8月 23 2021 gcc -> gcc-7
-rwxr-xr-x 2 root root 2210656 2月 10 2026 gcc-15
-rwxr-xr-x 1 root root 1026488 1月 25 2025 gcc-7
lrwxrwxrwx 1 root root 8 8月 23 2021 gcc-ar -> gcc-ar-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 gcc-ar-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 gcc-ar-7
lrwxrwxrwx 1 root root 8 8月 23 2021 gcc-nm -> gcc-nm-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 gcc-nm-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 gcc-nm-7
lrwxrwxrwx 1 root root 12 8月 23 2021 gcc-ranlib -> gcc-ranlib-7
-rwxr-xr-x 1 root root 35488 2月 10 2026 gcc-ranlib-15
-rwxr-xr-x 1 root root 31168 1月 25 2025 gcc-ranlib-7
haifeng@localhost:/usr/bin> sudo update-alternatives --list gcc
update-alternatives: error: no alternatives for gcc
这说明 gcc 的 alternatives 还没有配置. 如果已经设置了配置, 则可以先删除.
# 1. 删除 g++ 的独立 alternatives 配置
sudo update-alternatives --remove-all g++
# 2. 删除 gcc 的旧配置(如果有的话)
sudo update-alternatives --remove-all gcc
# 3. 重新注册 gcc,同时将 g++ 作为从属
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-15 150 \
--slave /usr/bin/g++ g++ /usr/bin/g++-15 \
--slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-15 \
--slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-15 \
--slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-15
# 4. 注册 GCC 7(优先级低一些)
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70 \
--slave /usr/bin/g++ g++ /usr/bin/g++-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
这里数字(70、150)是优先级,数值越大优先级越高。这里给 GCC 15 设了更高的优先级 150,GCC 7 是 70。
查看
haifeng@localhost:/usr/bin> ls -la /etc/alternatives/ | grep -E "gcc|g\\+\\+"
lrwxrwxrwx 1 root root 19 8月 29 17:34 clang++ -> /usr/bin/clang++-17
lrwxrwxrwx 1 root root 15 8月 31 09:48 g++ -> /usr/bin/g++-15
lrwxrwxrwx 1 root root 15 8月 31 09:48 gcc -> /usr/bin/gcc-15
lrwxrwxrwx 1 root root 18 8月 31 09:48 gcc-ar -> /usr/bin/gcc-ar-15
lrwxrwxrwx 1 root root 18 8月 31 09:48 gcc-nm -> /usr/bin/gcc-nm-15
lrwxrwxrwx 1 root root 22 8月 31 09:48 gcc-ranlib -> /usr/bin/gcc-ranlib-15
验证
haifeng@localhost:/usr/bin> gcc --version
gcc (SUSE Linux) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
haifeng@localhost:/usr/bin> g++ --version
g++ (SUSE Linux) 15.2.0
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.