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

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

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

查看版本

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

1234567891011121314151617# gccgcc -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++*

安装

命令行安装

安装依赖

123sudo apt updatesudo apt upgradesudo apt install build-essential

安装gcc、g++

123456# gccsudo apt-get install gcc ##安装最新版本,此处为7sudo apt-get install gcc-4.8 ##安装指定版本# g++sudo apt-get install g++ ##安装最新版本,此处为7sudo apt-get install g++-4.8 ##安装指定版本

如果终端提示找不到:

12345678# gccapt-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

源码编译

安装依赖:

1234sudo apt updatesudo apt upgradesudo apt install build-essentialsudo apt install gcc g++ # 系统一个gcc和g++也没有的话可能会报错?

下载指定版本的源码,例如:http://ftp.gnu.org/gnu/gcc/gcc-7.5.0/gcc-7.5.0.tar.gz

解压:

12cd yourdownload/tar -xzvf gcc-7.5.0.tar.gz

下载依赖:

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

12cd gcc-7.5.0./contrib/download_prerequisites

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

编译安装:

1234mkdir buildcd 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.

1234sudo make -j8 # 可以使用nproc来查看CPU核心数。编译的时间蛮长的,耐心等待。sudo make install# Libraries have been installed in:# /usr/local/lib/../lib64

修改软链接:

123456789101112# 删除软链接sudo rm /usr/bin/gccsudo rm /usr/bin/g++sudo rm /usr/bin/gcc-arsudo rm /usr/bin/gcc-nmsudo rm /usr/bin/gcc-ranlib# 重新建立软链接sudo ln -s /usr/local/bin/gcc /usr/bin/gccsudo ln -s /usr/local/bin/gcc-ar /usr/bin/gcc-arsudo ln -s /usr/local/bin/gcc-nm /usr/bin/gcc-nmsudo ln -s /usr/local/bin/gcc-ranlib /usr/bin/gcc-ranlibsudo 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文件内添加语句:

123# .bashrcexport PATH=$PATH:/home/xxx/gcc-5.5.0/bin:/home/ronglei/gcc-5.5.0/lib64export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/gcc-5.5.0/lib/

查看版本:

1234567891011121314151617$ gcc -vUsing built-in specs.COLLECT_GCC=gccCOLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.5.0/lto-wrapperTarget: x86_64-pc-linux-gnuConfigured with: ../configure -enable-languages=c,c++ -disable-multilib -enable-checking=releaseThread model: posixgcc version 7.5.0 (GCC) $ g++ -vUsing built-in specs.COLLECT_GCC=g++COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/x86_64-pc-linux-gnu/7.5.0/lto-wrapperTarget: x86_64-pc-linux-gnuConfigured with: ../configure -enable-languages=c,c++ -disable-multilib -enable-checking=releaseThread model: posixgcc version 7.5.0 (GCC)

完成。

版本管理

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

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

12345678910111213141516171819# 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。

update-alternatives 报错找不到候选项:

确保~.bashrc中存在export PATH="$PATH:/usr/bin"。

要先至少使用一次sudo update-alternatives --install命令添加一个gcc/g++版本,才可以显示候选项、调整候选项的优先级等。

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

123456gcc -vg++ -v# 查看全部的备选项(包括从属链接),请使用 --display 选项:sudo update-alternatives --display gccsudo 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

相关文章