gcc、g++的安装与版本管理

本文最后更新于 2024年12月19日 晚上

本文主要分享了在Linux下gcc、g++库的安装与版本管理。

查看版本

猜测:例如,/usr/bin/目录下有3个gcc,分别是gccgcc-7gcc-10,三者都是软链接。意思是当前系统中有gcc的版本为7和10两种可以指定给gcc默认使用的版本,指定的方式就是把gcc的软链接指向gcc-7gcc-10

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# gcc
gcc -v # 此时默认指定的gcc版本
# 查询除默认指定的gcc以外的其他gcc的版本
gcc-10 -v # 请将命令中的10替换为您安装的版本
# 查看/usr/bin目录下以gcc为前缀的文件
ls /usr/bin/gcc*
#此处使用 ll 命令更好(可以看到软链接):
ll /usr/bin/gcc*

# g++
g++ -v # 此时默认指定的g++版本
# 查询除默认指定的gcc以外的其他gcc的版本
g++-10 -v # 请将命令中的10替换为您安装的版本
# 查看/usr/bin目录下以g++为前缀的文件
ls /usr/bin/g++*
#此处使用 ll 命令更好(可以看到软链接):
ll /usr/bin/g++*

安装

命令行安装

安装依赖

1
2
3
sudo apt update
sudo apt upgrade
sudo apt install build-essential

安装gcc、g++

1
2
3
4
5
6
# gcc
sudo apt-get install gcc ##安装最新版本,此处为7
sudo apt-get install gcc-4.8 ##安装指定版本
# g++
sudo apt-get install g++ ##安装最新版本,此处为7
sudo apt-get install g++-4.8 ##安装指定版本

如果终端提示找不到:

1
2
3
4
5
6
7
8
# gcc
apt-cache policy gcc-5 # 查看gcc5可选的版本
# 选择其中一个版本进行安装
sudo apt-get install gcc-5=5.5.0-12ubuntu1
# g++
apt-cache policy g++-5 # 查看gcc5可选的版本
# 选择其中一个版本进行安装
sudo apt-get install g++-5=5.5.0-12ubuntu1

源码编译

  1. 安装依赖:

    1
    2
    3
    4
    sudo apt update
    sudo apt upgrade
    sudo apt install build-essential
    sudo apt install gcc g++ # 系统一个gcc和g++也没有的话可能会报错?
  2. 下载指定版本的源码,例如:http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz

  3. 解压:

    1
    2
    cd yourdownload/
    tar -xzvf gcc-7.5.0.tar.gz
  4. 下载依赖:

    gcc-7.5.0根目录下的README文档提示在./INSTALL/index.html下提供了详细的安装教程。

    1
    2
    cd gcc-7.5.0
    ./contrib/download_prerequisites

    如果下载失败,可以离线下载,具体需要下载的依赖可以查看download_prerequisites脚本。下载完成后,将文件放在gcc-9.2.0根目录下。

  5. 编译安装:

    1
    2
    3
    4
    mkdir build
    cd build
    ./configure -h # 可以查看详细的配置帮助
    ../configure --enable-languages=c,c++ --disable-multilib --enable-checking=release # 如果要编译多个gcc版本后面做版本管理,建议添加--prefix参数来指定安装路径(而不是使用默认路径),例如:--prefix=/usr/local/gcc/gcc750

    By default, make install will install all the files in usr/local/bin/, usr/local/libetc. You can specify an installation prefix other than /usr/local using --prefix for instance --prefix=$HOME.

    1
    2
    3
    4
    sudo make -j8  # 可以使用nproc来查看CPU核心数。编译的时间蛮长的,耐心等待。
    sudo make install
    # Libraries have been installed in:
    # /usr/local/lib/../lib64
  6. 修改软链接:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    # 删除软链接
    sudo rm /usr/bin/gcc
    sudo rm /usr/bin/g++
    sudo rm /usr/bin/gcc-ar
    sudo rm /usr/bin/gcc-nm
    sudo rm /usr/bin/gcc-ranlib
    # 重新建立软链接
    sudo ln -s /usr/local/bin/gcc /usr/bin/gcc
    sudo ln -s /usr/local/bin/gcc-ar /usr/bin/gcc-ar
    sudo ln -s /usr/local/bin/gcc-nm /usr/bin/gcc-nm
    sudo ln -s /usr/local/bin/gcc-ranlib /usr/bin/gcc-ranlib
    sudo ln -s /usr/local/bin/g++ /usr/bin/g++

    也可以不用修改软链接,而是直接在.bashrc里指定环境变量?

    例如,当编译命令为:

    1
    ../configure --disable-checking --enable-languages=c,c++ --disable-multilib --prefix=/home/xxx/gcc-5.5.0 --enable-threads=posix

    时,在~/.bashrc文件内添加语句:

    1
    2
    3
    # .bashrc
    export PATH=$PATH:/home/xxx/gcc-5.5.0/bin:/home/ronglei/gcc-5.5.0/lib64
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/gcc-5.5.0/lib/
  7. 查看版本:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    $ gcc -v
    Using built-in specs.
    COLLECT_GCC=gcc
    COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.5.0/lto-wrapper
    Target: x86_64-pc-linux-gnu
    Configured with: ../configure -enable-languages=c,c++ -disable-multilib -enable-checking=release
    Thread model: posix
    gcc version 7.5.0 (GCC)

    $ g++ -v
    Using built-in specs.
    COLLECT_GCC=g++
    COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.5.0/lto-wrapper
    Target: x86_64-pc-linux-gnu
    Configured with: ../configure -enable-languages=c,c++ -disable-multilib -enable-checking=release
    Thread model: posix
    gcc version 7.5.0 (GCC)
  8. 完成。

版本管理

对应使用命令行安装的方法

在安装好多个版本后,使用 update-alternatives 命令为每个 GCC 版本设置优先级。Ubuntu 系统会默认使用优先级最高的版本,如果有需要,可以随时更改。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# gcc
# 通过下面的指令来选择不同的gcc的版本/查看各版本的优先级
sudo update-alternatives --config gcc
# 将版本7加入候选中,其中50、100为优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
# 将版本10加入候选中
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-10 100
# 删除选项操作
sudo update-alternatives --remove gcc /usr/bin/gcc-4.8

# g++
# 通过下面的指令来选择不同的g++的版本/查看各版本的优先级
sudo update-alternatives --config g++
# 将版本7加入候选中,其中50、100为优先级
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-7 50
# 将版本10加入候选中
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-10 100
# 删除选项操作
sudo update-alternatives --remove g++ /usr/bin/g++-4.8

当切换使用了其他版本的gcc时,请务必保持g的版本和gcc版本的一致性,否则用cmake配置出来的项目遇到c代码还是会用之前版本的gcc。

在配置完优先级之后,通过查询当前gcc、g++版本的方式来验证所期望的版本是否已成为默认版本。

1
2
3
# 查看全部的备选项(包括从属链接),请使用 --display 选项:
sudo update-alternatives --display gcc
sudo update-alternatives --display g++

对应使用源码编译的方法

源码编译的第6步相同,修改软链接即可。

参考链接

【Linux 基础】gcc、g++多版本间的切换

如何在 Ubuntu 中安装和切换多版本 GCC 编译器

Ubuntu高版本如何安装低版本GCC (以Ubuntu 20安装GCC5为例)

Linux纯命令行以源码编译安装gcc(2024年2月5日)

linux gcc-9.2.0 源码编译

ubuntu系统以源码方式安装gcc


gcc、g++的安装与版本管理
http://zeyulong.com/posts/6dba0521/
作者
龙泽雨
发布于
2024年1月10日
许可协议