执行二进制文件时出现“exec格式错误”[重复]
Posted
技术标签:
【中文标题】执行二进制文件时出现“exec格式错误”[重复]【英文标题】:Getting "exec format error" while executing binary file [duplicate] 【发布时间】: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。
【参考方案1】:
gcc -c -o volatandconstvolatile volatandconstvolatile.c
这个编译命令行没有意义。
-c
表示“仅编译”并且不链接。但是您要保留 .o
后缀,这意味着您正在构建一个完整的可执行文件,这是错误的。
您可以像这样在一次调用 GCC 中构建您的完整应用程序,方法是省略 -c
:
gcc -o volatandconstvolatile volatandconstvolatile.c
请注意,LD 会自动设置输出二进制文件的可执行位。您必须手动 chmod
文件这一事实应该是有问题的线索。
【讨论】:
以上是关于执行二进制文件时出现“exec格式错误”[重复]的主要内容,如果未能解决你的问题,请参考以下文章
加载 back.json 文件 PostgreSQL 时出现重复键问题