bash:./remoteServer .o:无法执行二进制文件:Exec格式错误

问题描述 投票:1回答:1

我正在尝试运行c程序remoteServer.c。我使用Makefile对其进行了编译。当我尝试使用./remoteServer.o运行它时,出现以下错误。我读到这可能是不同体系结构的原因,但我看到两者都是x86-64。我在VM上运行ubuntu 18.04.03。生成文件的代码在命令之后。另外,我在.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

Makefile:

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)
c command-line compilation executable ubuntu-18.04
1个回答
0
投票

注意gcc -c compiles source files without linking

然后,考虑“编译是指处理源代码文件(.c,.cc或.cpp)并创建“对象”文件。此步骤不会为用户创建任何内容可以实际运行。“ reference

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.