添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
冷冷的洋葱  ·  GCC compile error on ...·  1 月前    · 
文雅的开水瓶  ·  warning: relocation ...·  1 月前    · 
温暖的卡布奇诺  ·  Exchange Server 中的 ...·  2 月前    · 
近视的包子  ·  jQuery ajax ...·  3 月前    · 
坐怀不乱的作业本  ·  Top 8 JavaScript ...·  4 月前    · 

猜测:例如, /usr/bin/ 目录下有3个 gcc ,分别是 gcc gcc-7 gcc-10 ,三者都是软链接。意思是当前系统中有 gcc 的版本为7和10两种可以指定给 gcc 默认使用的版本,指定的方式就是把 gcc 的软链接指向 gcc-7 gcc-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
2
3
4
sudo apt update
sudo apt upgrade
sudo apt install build-essential
sudo apt install gcc g++ # 系统一个gcc和g++也没有的话可能会报错?

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

1
2
cd yourdownload/
tar -xzvf gcc-7.5.0.tar.gz

下载依赖:

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

1
2
cd gcc-7.5.0
./contrib/download_prerequisites

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

编译安装:

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/lib etc. 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

修改软链接:

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/

查看版本:

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)

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 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
# 通过下面的指令来选择不同的gcc的版本
sudo update-alternatives --config gcc
# 删除选项操作
sudo update-alternatives --remove gcc /usr/bin/gcc-4.8

# 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
# 通过下面的指令来选择不同的g++的版本
sudo update-alternatives --config g++
# 删除选项操作
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