【问题标题】:bash: ./remoteServer .o: cannot execute binary file: Exec format errorbash:./remoteServer .o:无法执行二进制文件:执行格式错误
【发布时间】:2020-01-12 10:51:24
【问题描述】:

我正在尝试运行 c 程序 remoteServer.c。我使用 Makefile 编译它。当我尝试使用 ./remoteServer.o 运行它时,出现以下错误。我读到这可能是不同架构的原因,但我看到两者都是 x86-64。我在虚拟机上运行 ubuntu 18.04.03。 make 文件的代码在命令之后。我还在 .c 和 .o 文件上使用了 chmod 777。

isidoros@isidoros-VirtualBox:~/choice$ ./remoteServer.o

bash: ./remoteServer.o: cannot execute binary file: Exec format error

isidoros@isidoros-VirtualBox:~/choice$ file remoteServer.c

remoteServer.c: C source, ASCII text

isidoros@isidoros-VirtualBox:~/choice$ file remoteServer.o

remoteServer.o: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), with debug_info, not stripped

isidoros@isidoros-VirtualBox:~/choice$ uname -m

x86_64

生成文件:

OBJS    = remoteServer.o

SOURCE  = remoteServer.c

HEADER  = 

OUT = make

CC   = gcc

FLAGS    = -g -c -Wall

LFLAGS   = 

all: $(OBJS)
    $(CC) -g $(OBJS) -o $(OUT) $(LFLAGS)

remoteServer.o: remoteServer.c
    $(CC) $(FLAGS) remoteServer.c 

clean:
    rm -f $(OBJS) $(OUT)

【问题讨论】:

  • 您无法运行.o 文件。那是一个中间对象,而不是最终的可执行文件。您的 makefile 设置为构建一个名为 make 的可执行文件。不确定这是否是故意的,但请尝试查找并运行./make

标签: c command-line compilation executable ubuntu-18.04


【解决方案1】:

请注意gcc -c compiles source files without linking

那么,考虑“编译是指处理源代码文件(.c、.cc或.cpp)并创建一个'object'文件。这一步不创建用户可以实际运行的任何东西。" reference

同时:“链接是指从多个目标文件创建单个可执行文件。”

因此,您可能想要链接程序,即使它包含单个源文件(从您的角度来看,这可能取决于您所包含的库)。

我还认为您的 makefile 试图将可执行文件命名为“make”,这可能是一个问题,因为您可能正在调用 GNU make 程序来编译您的代码。

【讨论】:

    猜你喜欢
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多