执行二进制文件时出现“ exec格式错误”

时间:2018-08-08 01:14:37

标签: c gcc

#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是用来从外部手段获取值的。

为什么会出现此错误?

1 个答案:

答案 0 :(得分:4)

gcc -c -o volatandconstvolatile volatandconstvolatile.c

此编译命令行没有任何意义。

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

您可以通过取消-c来在这样的GCC调用中构建完整的应用程序:

gcc -o volatandconstvolatile volatandconstvolatile.c

请注意,LD自动设置输出二进制文件的可执行位。您必须手动chmod该文件这一事实应该表明存在某些问题。