ubuntu16.04在编译某个内核模块时,突然提示错误:
arch/x86/Makefile:245: *** You are building kernel with non-retpoline compiler, please update your compiler.. Stop.
正如字面意思,需要升级编译器,比如gcc,当前ubuntu16.04上使用的是gcc4.9(非默认的gcc5.4),应该是ubuntu内核与gcc版本上有些不适合;
通过uname -r 查看当前内核版本:4.15.0-52-generic,编译的内核目录:/usr/src/linux-headers-4.15.0-52-generic;其中/usr/src/目录下还有其他的内核版本:linux-headers-4.15.0-47-generic,linux-headers-4.15.0-50-generic,linux-headers-4.15.0-51-generic,linux-headers-4.15.0-52-generic;
分析后可以有两个方向尝试解决:
1.升级gcc到更高级的版本;
2.回退内核到低级的版本;
第一种方法通过sudo apt install就可以解决,如果当前系统gcc有多版本,可以通过sudo update-alternative --config gcc选择;
第二种方法,可以重启虚拟机,然后按ESC进入grub,选择ubuntu options中的较低版本内核启动即可;如果要设置为默认启动选项,需要修改/boot/grub/grub.cfg文件。