【问题标题】:Cannot execute binary file: Exec format error after compiling Linux kernel无法执行二进制文件:编译Linux内核后执行格式错误
【发布时间】:2018-08-23 15:08:50
【问题描述】:

我是一名新的 Linux 用户,对一个问题感到困惑。 编译 Linux 内核后,我尝试运行输出文件(例如 net/ipv4/ping.o 中的 ./ping.o)。 但是,终端的输出说

bash: ./ping.o: 无法执行二进制文件:执行格式错误

后来我用了

文件 ping.o

输出是

ping.o:ELF 64 位 LSB 可重定位,x86-64,版本 1 (SYSV),带有 debug_info,未剥离

而我的电脑和文件的架构是一样的,就是x86_64

uname -m

x86_64

谁能帮我解答这个问题,或者给我一个提示? 如果我能得到原因,我会很高兴的。 非常感谢。

【问题讨论】:

    标签: linux


    【解决方案1】:

    这里有多个问题:

    • Linux 内核不应该从 Linux 命令行运行。它应该从特权模式运行以启动操作系统。

    • .o 文件是所谓的object files。它们包含已编译的代码和对其他符号(其他代码)的引用,但不包含引用的代码本身。这意味着您不能运行目标文件,因为它只是一个难题。首先,您需要将所有目标文件链接在一起。当然,这是在构建 Linux 时完成的,结果在前一段时间被称为 vmlinuz,也许他们再次重命名了它。

    • 即使您要链接 ping.o,它也可能缺少入口点(main() 函数)。有一些代码,但不知道如何运行它以及将什么作为输入传递。 main 函数提供了所有这些。

    如果您详细说明为什么您正在做您正在做的事情,我可能会为您提供更多帮助。

    【讨论】:

    • 非常感谢你的解释,看了你的回答我明白了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-25
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-10-11
    相关资源
    最近更新 更多