Linux内核编译错误:elf_x86_64缺失。

3
我正在使用带有3.11内核的Ubuntu Linux 12.04。
由于我的工作需要,我必须打补丁来使内核实时应用。所以,我下载了带有补丁的Linux 2.6.31.6内核并尝试进行打补丁、编译和安装。
然而,在我尝试编译时出现了以下错误:
CC      arch/x86/vdso/vgetcpu.o
CC      arch/x86/vdso/vvar.o
VDSO    arch/x86/vdso/vdso.so.dbg

gcc: Error: elf_x86_64: File or directory not found
make[2]: *** [arch/x86/vdso/vdso.so.dbg] Error 1
make[1]: *** [arch/x86/vdso] Error 2
make: *** [arch/x86] Error 2

我在编译RT 2.6内核时,使用了与3.11相同的配置文件(当然进行了一些编辑),并查看了 /arch/x86/vdso 目录,但发现缺少 vdso.so.dbg 文件(不知道在哪里获取)。

希望你能够帮助我,如果需要进一步的信息,我会尽力提供。

真诚地, Adrian


你为什么要混合使用2.6和3.11?这显然会引起麻烦。 - zoska
我的前任告诉我,即使这是两个不同的版本,它也应该可以运行。但是,当我尝试打补丁3.11内核时,我成功编译并安装了它。感谢您的建议。 - user3464421
这两个内核有很多很多很多的区别,即使是文件的内容和位置也不同。很可能这就是你所遇到的问题。 - zoska
2个回答

5

我修改了arch/x86/vdso/Makefile

VDSO_LDFLAGS_vdso.lds = -m elf_x86_64 [...]
...
VDSO_LDFLAGS_vdso32.lds = -m elf_x86 [...]

to

VDSO_LDFLAGS_vdso.lds = -m64 [...]
...
VDSO_LDFLAGS_vdso32.lds = -m32 [...]

2
问题在于gcc如何从arch/x86/vdso/Makefile获取一些标志。替换掉原来的
VDSO_LDFLAGS_vdso.lds = -m elf_x86_64

使用

VDSO_LDFLAGS_vdso.lds = -m64

应该可以正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接