【问题标题】:Getting "exec format error" while executing binary file [duplicate]执行二进制文件时出现“exec格式错误”[重复]
【发布时间】:2018-08-08 01:14:36
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    volatile int x;

    printf("without assignment %d", x);
    x = 100;
    printf("%d", x);
}

gcc -c -o volatandconstvolatile volatandconstvolatile.c

我得到了volatandconstvolatile 文件但是

-rw-rw-r--  1 naveenkumar naveenkumar      1600 Aug  8 05:12 volatandconstvolatile

然后我更改了权限chmod 777 volatandconstvolatile

然后./volatandconstvolatile

./volatandconstvolatile: cannot execute binary file: Exec format error
objdump volatandconstvolatile | grep "archit"
architecture: i386:x86-64, flags 0x00000011:

readelf -a -W  volatandconstvolatile

我知道volatile 用于从外部获取值。

为什么会出现这个错误?

【问题讨论】:

  • -c 选项告诉gcc 在不链接的情况下编译为目标文件。所以你有一个目标文件。省略该选项,它将起作用。
  • 运行 file volatandconstvolatile /bin/sh 会显示文件类型之间的巨大差异。
  • @JerryJeremiah 不,-o 只是更改输出文件名。名称中缺少.o 不会使文件神奇地可执行。看我的回答。他们需要离开-c
  • 更简单,只需让 Make 为您编译和链接:make volatandconstvolatile.
  • @TobySpeight make 不是万灵药。您仍然需要知道正确的编译器命令才能放入 Makefile。

标签: c gcc


【解决方案1】:
gcc -c -o volatandconstvolatile volatandconstvolatile.c

这个编译命令行没有意义。

-c 表示“仅编译”并且不链接。但是您要保留 .o 后缀,这意味着您正在构建一个完整的可执行文件,这是错误的。

您可以像这样在一次调用 GCC 中构建您的完整应用程序,方法是省略 -c

gcc -o volatandconstvolatile volatandconstvolatile.c

请注意,LD 会自动设置输出二进制文件的可执行位。您必须手动 chmod 文件这一事实应该是有问题的线索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 2020-12-04
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多