不知道这里发生了什么。我正在尝试将我的Linux内核从4.9.x升级到4.14.x,并且发生了以下情况:
In file included from arch/x86/decode.c:26:0:
arch/x86/../../elf.h:22:18: fatal error: gelf.h: No such file or directory
#include <gelf.h>
^
compilation terminated.
mv: cannot stat ‘/usr/src/linux-4.14.51/tools/objtool/arch/x86/.decode.o.tmp’: No such file or directory
make[4]: *** [/usr/src/linux-4.14.51/tools/objtool/arch/x86/decode.o] Error 1
make[3]: *** [arch/x86] Error 2
make[2]: *** [/usr/src/linux-4.14.51/tools/objtool/objtool-in.o] Error 2
make[1]: *** [objtool] Error 2
make: *** [tools/objtool] Error 2
这里发生了什么想法(明显除外)?应该“ gelf.h
”已经在我的电脑上吗?还是在内核tarball中?
我从kernel.org下载了vanilla 4.14.51 - 我已经成功地重复编译了我自己的(未经修改的)香草内核14年了,但这是新的。
我的电脑是配备Core2 i5(64位)和Slackware 14.1的戴尔笔记本电脑 - 几年前我用3.1.x升级了3.17.x股票,最近升级到4.9.x(目前为4.9.109)。
我确实安装了libelf:
me@mylaptop:~$ locate gelf.h
/usr/include/libelf/gelf.h
me@mylaptop:~$ ls /var/log/packages/*elf*
/var/log/packages/libelf-0.8.13-x86_64-2
附录
在昨晚尝试4.14.55时,我注意到内核构建脚本期望看到“gelf.h”的目录位于内核源代码树中,而不是常规目录/usr/include
。
话虽这么说,在我的(运行)4.9.x源代码树相应的目录下并没有任何.o
也不.ko
文件。显然在4.14.x中启用了一个我在4.9.x中没有启用的配置项。
我已经尝试将4.14.x配置为尽可能靠近我工作的4.9.x; 我知道一些新的选项,但通常我会尝试在中间内核版本之间保持相同的配置。
话虽这么说,我不知道是什么配置选项,它想要看到头文件linux-4.14.*/tools/objtool/arch/x86/
... 任何想法?
stat $(locate gelf.h)
给出一个大小为5103字节的常规文件。 cat
该文件显示了一堆C预处理器代码。Copyright (C) 2000 - 2006 Michael Riepe