【发布时间】: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。