Ubuntu18.04系统gcc多版本共存与切换
原因:为了和CUDA版本相适应,需要同时安装gcc4.8和gcc7
附: Tensorflow-GPU、CUDA、GCC版本对应关系
!- 符号约定 -!
:~$ # 代表输入命令
>> # 代表输出结果
1. 查看系统gcc版本
:~$ gcc -v
>> #忽略看最后一行
>> gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04) # 最后一行显示当前gcc版本为7.5.0
2. 查看当前已有的 gcc 版本
:~$ ls /usr/bin/gcc*
>>
/usr/bin/gcc /usr/bin/gcc-ar /usr/bin/gcc-nm /usr/bin/gcc-ranlib
/usr/bin/gcc-4.8 /usr/bin/gcc-ar-4.8 /usr/bin/gcc-nm-4.8 /usr/bin/gcc-ranlib-4.8
/usr/bin/gcc-7 /usr/bin/gcc-ar-7 /usr/bin/gcc-nm-7 /usr/bin/gcc-ranlib-7
将上边的查询结果放到文本编辑器中查看,可知系统同时存在gcc4.8,gcc7。(第一行为快捷方式)
3. 安装需要的gcc版本
(因为我系统中已存在gcc4.8,这步跳过)
:~$ sudo apt-get install gcc-4.8 gcc-4.8-multilib g++-4.8 g++-4.8-multilib
4. 在版本管理中为各版本gcc注册快捷方式
最后的70,40是其注册的优先级,数字越大优先级越高,系统默认采用高优先级。
:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
5. 进行版本切换
:~$ sudo update-alternatives --config gcc
>>
有 2 个候选项可用于替换 gcc (提供 /usr/bin/gcc)。
选择 路径 优先级 状态
------------------------------------------------------------
* 0 /usr/bin/gcc-7 70 自动模式
1 /usr/bin/gcc-4.8 40 手动模式
2 /usr/bin/gcc-7 70 手动模式
要维持当前值[*]请按<回车键>,或者键入选择的编号:1 # 这里根据需要选择
update-alternatives: 使用 /usr/bin/gcc-4.8 来在手动模式中提供 /usr/bin/gcc (gcc)
6. 查看是否切换完成
:~$ gcc -v
>> # 忽略前边看最后一行
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.5-4ubuntu8' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.5 (Ubuntu 4.8.5-4ubuntu8) # 最后一行显示当前gcc版本为4.8.5
附录
linux软件版本管理命令update-alternatives使用简介:
:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 70
:~$ sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
1> --install : 向update-alternatives注册服务名。
2> /usr/bin/gcc : 注册后的快捷方式 (软连接)
3> gcc :服务名
4> /usr/bin/gcc-7 : 2中软连接指向的真实服务地址
5> 70 : 优先级,数字越大优先级越高
所以上述两条命令起得作用是,分别注册一个服务名为gcc(当系统启用这项服务时,会打开快捷方式(软连接))。其软连接指向服务的真实地址分别是/usr/bin/gcc-7和/usr/bin/gcc-4.8。这两条指向的优先级别为70和40。
后续管理的便是软连接的指向。