我正在尝试运行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)
注意gcc -c compiles source files without linking。
然后,考虑“编译是指处理源代码文件(.c,.cc或.cpp)并创建“对象”文件。此步骤不会为用户创建任何内容可以实际运行。“ reference
同时:“链接是指从多个目标文件创建一个可执行文件。”
因此,即使程序包含单个源文件(从您的角度来看,它可能取决于所包含的库),您也可能希望链接该程序。
[我还认为您的makefile试图将可执行文件命名为“ make”,这可能是个问题,因为您可能正在调用GNU make
程序来编译代码。