如何在ubuntu上使用较新版本的gcc?

问题描述 投票:0回答:2

我运行的是 ubuntu 18.04,目前有:

(tensorflow_p36) ubuntu@user:~$ gcc --version
gcc (GCC) 4.8.5

(tensorflow_p36) ubuntu@user:~$ gcc-8 --version
gcc-8 (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0

(tensorflow_p36) ubuntu@user:~$ which gcc
/home/ubuntu/anaconda3/envs/tensorflow_p36/bin/gcc

我正在尝试使用最新的

gcc-8
,如这里所示。然而当我跑步时

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8

我收到以下错误:

update-alternatives:错误:替代 g++ 不能成为 gcc 的奴隶:它 是一个主要的选择

当我尝试时:

(tensorflow_p36) ubuntu@user:~$ sudo update-alternatives --config gcc

我收到另一个错误:

更新替代品:错误:gcc 没有替代品

我怎么没有

gcc
的替代品?任何关于如何解决此错误并将
gcc-8
配置为默认 gcc 安装的建议将不胜感激。


从 conda 环境外部运行

which gcc
不会返回任何内容:

ubuntu@user:~$ which gcc
ubuntu@user:~$

但是

ubuntu@user:~$ gcc-8 --version
gcc-8 (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0

更新。我正在根据下面的有用建议尝试以下操作,但仍然无济于事。

(tensorflow_p36) ubuntu@user:~$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 40
(tensorflow_p36) ubuntu@user:~$ sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 60
(tensorflow_p36) ubuntu@user:~$ sudo update-alternatives --config g++
There are 3 choices for the alternative g++ (providing /usr/bin/g++).

  Selection    Path                             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/x86_64-linux-gnu-g++-7   100       auto mode
  1            /usr/bin/g++-4.8                  60        manual mode
  2            /usr/bin/g++-8                    40        manual mode
  3            /usr/bin/x86_64-linux-gnu-g++-7   100       manual mode

Press <enter> to keep the current choice[*], or type selection number: 2
update-alternatives: using /usr/bin/g++-8 to provide /usr/bin/g++ (g++) in manual mode

到目前为止一切都很好,但是当我测试 g++ 版本时,它仍然是一样的!

~$ g++ --version
g++ (GCC) 4.8.5
gcc ubuntu-18.04
2个回答
2
投票

您可能是因为 nvidia 发生故障才到达的。 (我使用的是 cudatoolkit 11.4,实际上降级让我摆脱了麻烦 - 您的里程可能会有所不同。)

sudo apt install gcc-9 g++-9
sudo mkdir /usr/local/cuda/bin
sudo ln -s /usr/bin/gcc-9 /usr/local/cuda/bin/gcc

警告 - 我建议使用时移来备份您的工作系统。 https://github.com/teejee2008/timeshift

这将为您提供最新的 gcc 11

sudo add-apt-repository 'deb http://mirrors.kernel.org/ubuntu hirsute main universe'
sudo apt-get install g++-11
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 50
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 50
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-11 100
sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-11 50
sudo update-alternatives --set g++ /usr/bin/g++-11
sudo update-alternatives --set gcc /usr/bin/gcc-11
sudo update-alternatives --set cpp-bin /usr/bin/cpp-11
gcc --version
gcc (Ubuntu 11-20210417-1ubuntu1) 11.0.1 20210417 

版权所有 (C) 2021 Free Software Foundation, Inc.


0
投票

从表面上看,在你的conda环境中,

gcc
命令已经链接到了
/home/ubuntu/anaconda3/envs/tensorflow_p36/bin/gcc
,并且版本是4。而在环境之外,路径上唯一的
gcc
gcc-8
,它对应版本8.

此外,正如您所观察到的,您无法为

gcc
创建替代方案,因为它链接到
g++
替代方案。

我也更喜欢让 gcc 成为主要替代方案,所有其他工具(包括 g++)也都效仿。在这种情况下,我将首先删除

g++
替代方案:

sudo update-alternatives --remove-all g++

现在我们已经解决了这个问题,我们可以为

gcc
创建一个链接到
gcc-8

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 --slave /usr/bin/g++ g++ /usr/bin/g++-8 --slave /usr/bin/gcc-ar gcc-ar /usr/bin/gcc-ar-8 --slave /usr/bin/gcc-nm gcc-nm /usr/bin/gcc-nm-8 --slave /usr/bin/gcc-ranlib gcc-ranlib /usr/bin/gcc-ranlib-8

参考文献

  1. https://askubuntu.com/a/26518/145907
  2. https://askubuntu.com/a/1206264/145907
© www.soinside.com 2019 - 2024. All rights reserved.