【问题标题】:Linux kernel compile error elf_x86_64 missingLinux内核编译错误elf_x86_64丢失
【发布时间】:2014-03-26 13:45:47
【问题描述】:

我正在使用带有 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 文件不见了(而且我不知道从哪里得到它)。

希望您能帮助我,如果您需要更多信息,我会尽力提供。

此致 阿德里安

【问题讨论】:

  • 为什么要混合 2.6 和 3.11?这显然是在自找麻烦。
  • 我的前任告诉我,即使它们是两个不同的版本,它也应该运行。但是,是的,一旦我尝试修补 3.11 内核,我就能够编译和安装它。感谢您的建议。
  • 这两个内核有很多很多不同,即使在文件内容和位置方面也是如此。可能这就是你遇到的问题。

标签: c linux linux-kernel


【解决方案1】:

我换了arch/x86/vdso/Makefile

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

到

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
    

    应该可以。

    【讨论】:

      猜你喜欢
      • 2018-04-19
      • 1970-01-01
      • 2018-09-14
      • 1970-01-01
      • 2017-10-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-09
      相关资源
      最近更新 更多