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

bash:./remoteServer.o:无法执行二进制文件:Exec格式错误,c,command-line,compilation,executable,ubuntu-18.04,C,Command Line,Compilation,Executable,Ubuntu 18.04,我正在尝试运行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.

我正在尝试运行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)
请注意这一点

然后,“编译”指的是源代码文件(.c,.cc,.cp)的处理和“对象”文件的创建。<强>此步骤不会创建用户可以实际运行的< /强>。 同时:“链接是指从多个对象文件创建单个可执行文件。”

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

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

请注意这一点

然后,“编译”指的是源代码文件(.c,.cc,.cp)的处理和“对象”文件的创建。<强>此步骤不会创建用户可以实际运行的< /强>。 同时:“链接是指从多个对象文件创建单个可执行文件。”

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


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

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