上回介绍了多版本CUDA的管理方案。实际上在实现安装不同版本的CUDA之后部署模型时,意外发现了还有不同版本GCC共存的需求。同样,我不想删掉较高版本的GCC,进而寻求解决方案。

准备工作

首先查看当前gcc的版本。

1
gcc -v

然后查看gcc的安装路径是否已经有其他版本。

1
ls /usr/bin/gcc**

未安装多版本之前,我的主机仅有的一个gcc版本号为9,而实际部署需要gcc-8。如果已经满足自己的版本要求,就无需吹毛求疵了。如果不能满足,如版本过低或者过高,就要进行下面的步骤。

安装不同的gcc

老规矩在安装或者更新前,先运行

1
sudo apt-get update

接着安装gcc-8和g++-8,输入

1
sudo apt-get install gcc-8 g++-8

等待片刻即可安装成功。

设置优先级

不同于CUDA的自由切换,安装了多个版本的gcc之后,要手动设置优先级,来确定每次使用gcc编译时的版本。而优先级最高的,就是默认使用的gcc。由于当前需要的是gcc-8,不妨把这个的优先级设置高一点。

1
2
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 20 --slave /usr/bin/g++ g++ /usr/bin/g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10 --slave /usr/bin/g++ g++ /usr/bin/g++-9

自由选择

不同于CUDA,切换不同版本的gcc,不需要增删软链接,而是直接输入下面的命令,并且输入数字,选择想要的版本即可。

1
sudo update-alternatives --config gcc

这里会提示输入数字,最后按下Enter

1
2
3
4
5
6
7
8
9
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

Selection Path Priority Status
------------------------------------------------------------
* 0 /usr/bin/gcc-8 20 auto mode
1 /usr/bin/gcc-8 20 manual mode
2 /usr/bin/gcc-9 10 manual mode

Press <enter> to keep the current choice[*], or type selection number:

然后可以使用gcc -v检查是否切换到了想要的版本。

总结

无论在安装还是切换上面,gcc都比CUDA要友好很多。一是因为linux源本身就包含了gcc/g++,可以很方便地获取;二是因为gcc没有像CUDA设置软链接那样的操作,取而代之的是优先级和可视化的切换提示。无论是哪种方法,能较好地解决自己的需求即可。


参考:ubuntu系统查看gcc版本及版本切换