我运行的是 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
您可能是因为 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.
从表面上看,在你的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
参考文献