修改默认gcc版本
background
在以5.3为内核的ubuntu中编译3.10的内核时,出现:
include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc5.h错误
尝试了网上说的将当前内核(5.3)的compiler-gcc.h复制为被编译内核(3.10)的include/linux/compiler-gcc5.h,但是又报了新的错误,因此此条路作罢.
在stackoverflow里查找问题,有人提到是gcc版本的问题,gcc-4.8支持3.x的编译,而我的本地gcc版本为5.0.但是我又不想卸载掉我的gcc-5.0,怕影响当前环境中的其它软件的编译,因此找了一下如何在Linux上安装多个gcc版本,并修改默认gcc版本.这样就可以在编译3.10的内核时使用gcc-4.8,编译完成之后将gcc切换回gcc-5.0.
steps
# 安装gcc-4.8
sudo apt install gcc-4.8
# 设置gcc-4.8的优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 40
# 设置gcc-5的优先级
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-5 50
# 修改系统中的默认gcc版本
sudo update-alternatives --config gcc
说明: 执行sudo update-alternatives --config gcc之后,就会跳出选项,输入gcc版本对应的数字,就会选择对应的gcc版本作为默认版本.
extra knowledge
上述update-alternatives的用于修改系统中命令的实际执行程序.
--install <链接> <名称> <路径> <优先级> 在系统中加入一组候选项
<链接>: /usr/bin/gcc 为系统中某命令的具体路径,本文中指的就是在终端中执行gcc命令,会调用/usr/bin/gcc.
<名称>: gcc 为在终端中执行的具体命令,本文中指gcc
<路径>: /usr/bin/gcc-4.8和/usr/bin/gcc-5 为在终端中输入命令后,具体的执行程序的路径.本文中指在终端中输入gcc,具体调用的程序路径
<优先级>: 40和50,是一个整数,在自动模式下,这个数字越高的选项,其优先级也就越高。
--config <名称> 列出 <名称> 替换组中的可选项,并就使用其中哪一个,征询用户的意见。
<名称>: 即上面说的终端中的具体命令, gcc