概述
在编译linux内核时,linux会检查当前使用的gcc的版本,如果太老的话,就无法编译linux。
问题
执行命令make ARCH=x86_64 defconfig
时,提示如下错误:
*** Default configuration is based on 'x86_64_defconfig' *** *** Compiler is too old. *** Your GCC version: 4.8.5 *** Minimum GCC version: 5.1.0 *** scripts/Kconfig.include:44: Sorry, this compiler is not supported. make[2]: *** [defconfig] Error 1 make[1]: *** [defconfig] Error 2 make: *** [__sub-make] Error 2
检查逻辑
以Linux-5.16.12为例:
Kconfig
--> scripts/Kconfig.include
--> 获取编译器的name和版本:
# Get the compiler name, version, and error out if it is not supported. cc-info := $(shell,$(srctree)/scripts/cc-version.sh $(CC)) $(error-if,$(success,test -z "$(cc-info)"),Sorry$(comma) this compiler is not supported.) cc-name := $(shell,set -- $(cc-info) && echo $1) cc-version := $(shell,set -- $(cc-info) && echo $2)
上面调用cc-version.sh获取编译的name和版本,其中会检查版本是否符合要求。
cc-version.sh的实现
如果成功的话,会返回编译器的名字和版本,否则会退出编译。
上面使用min-tool-version.sh来获取最低要求的编译器版本,内容如下:
min-tool-version.sh的实现
上面对GCC版本要求最低为5.1.0
- 之前的linux对gcc的检查
linux/compiler-gcc.h
或者:
cc-version.sh
下面是一些linux对GCC版本的要求
Linux版本 | 最低GCC版本 | CPU |
5.15-rc2 | 5.1.0 | - |
5.10.13 | 5.1.0 | ARM64 |
5.8 | 4.9 | - |
4.18 | 4.6 | - |