Ubuntu下管理多个GCC版本

Linux update-alternatives 管理 GCC 版本指南

在 Linux 系统(如 Ubuntu 或 Debian)中,update-alternatives 是一个用于管理同一功能的不同版本的工具。本文将详细讲解如何使用 update-alternatives 管理 gcc(GNU C Compiler)的不同版本。

1. 基本概念

update-alternatives 允许用户在多个版本的同一程序之间进行选择。例如,在安装了 gcc-8、gcc-9 和 gcc-10 的情况下,可以通过该工具自由切换默认版本。

2. 添加 GCC 版本到 update-alternatives

命令格式:

bash 复制代码
sudo update-alternatives --install <主路径> <名称> <具体版本路径> <优先级>

示例:

bash 复制代码
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100
  • /usr/bin/gcc:主路径,表示 gcc 命令的默认路径。
  • gcc:替代项的名称。
  • /usr/bin/gcc-8:具体的 gcc-8 路径。
  • 100:优先级(值越高,优先级越高)。

如果要添加 gcc-9 或 gcc-10:

bash 复制代码
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 150
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 200

3. 查看当前 GCC 版本候选项

使用以下命令查看已添加的 gcc 版本:

bash 复制代码
sudo update-alternatives --config gcc

示例输出:

复制代码
有 3 个候选项用于 gcc (提供 /usr/bin/gcc)。

  选择      路径            优先级   状态
------------------------------------------------------------
* 1          /usr/bin/gcc-8   100     自动模式
  2          /usr/bin/gcc-9   150
  3          /usr/bin/gcc-10  200

4. 手动切换 GCC 版本

在上述选项中输入所需版本的编号。例如,选择 gcc-10:

bash 复制代码
3

5. 直接设置默认版本

如果希望直接将某个版本设置为默认版本,而不进入选择界面,可以使用 --set 命令:

bash 复制代码
sudo update-alternatives --set gcc /usr/bin/gcc-9

6. 验证当前 GCC 版本

使用以下命令检查当前使用的 gcc 版本:

bash 复制代码
gcc --version

7. 同时管理 G++ 版本

如果还需要管理 g++(C++ 编译器)的版本,可以按照同样的方法:

bash 复制代码
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 150
sudo update-alternatives --config g++

8. 移除某个版本

如果希望移除某个 gcc 版本,可以使用以下命令:

bash 复制代码
sudo update-alternatives --remove gcc /usr/bin/gcc-8

9. 总结

update-alternatives 是一个强大且灵活的工具,适用于管理多个版本的 gcc,方便开发人员在不同版本之间切换,满足不同项目对编译器版本的需求。

常用命令汇总:

功能 命令
添加版本 sudo update-alternatives --install
查看版本列表 sudo update-alternatives --config gcc
设置默认版本 sudo update-alternatives --set gcc /usr/bin/gcc-9
检查当前版本 gcc --version
移除版本 sudo update-alternatives --remove gcc /usr/bin/gcc-8
相关推荐
不悔哥8 分钟前
Linux系统编程多线程程序如何安全退出
linux
Fcy64822 分钟前
Linux下 数据链路层详解(从以太网到ARP协议)
linux·mac·以太网·数据链路层·arp
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
linux 进程信号(下)
linux·运维·服务器
skywalk81633 小时前
在FreeBSD系统的linux仿真环境下安装和使用kiro 这个亚马逊的AI agent
linux·人工智能·freebsd·kiro
Mikko73 小时前
Linux 磁盘满了但 du 找不到?LVM 扩容 df 不变?fstab 写错开不了机?三台真机实测磁盘排查
linux·运维·centos
Madison-No73 小时前
多语言聊天大模型--测试报告
linux·git·python·selenium·jmeter·自动化·postman
Liuqy-053 小时前
特殊进程——孤儿、僵尸、守护进程
linux·运维·服务器
流浪0013 小时前
Linux系统篇47——线程(十二) POSIX 信号量与环形队列,把判空判满提前到访问之前
linux·操作系统·线程·信号量·环形队列
咖丨喱4 小时前
【MMC Core + hc16 Host(WiFi SDIO 如何落到控制器)】
linux
等我调个Bug4 小时前
【Linux系统篇】权限
linux·服务器