bash:无法执行二进制文件:即使二进制文件和Linux是64位,也会执行格式错误

我对Linux很新。 我正在编译一个在线课程的代码。 /home/MyName/Desktop/Cplusplus-Advanced-Source-Code/cplusplus-advanced-source-code/BitmapFileHeaders/Debug的makefile如下:

 -include ../makefile.init print-% : ; @echo $* = $($*) RM := rm -rf # All of the sources participating in the build are defined here -include sources.mk -include src/subdir.mk -include subdir.mk -include objects.mk ifneq ($(MAKECMDGOALS),clean) ifneq ($(strip $(CC_DEPS)),) -include $(CC_DEPS) endif ifneq ($(strip $(C++_DEPS)),) -include $(C++_DEPS) endif ifneq ($(strip $(C_UPPER_DEPS)),) -include $(C_UPPER_DEPS) endif ifneq ($(strip $(CXX_DEPS)),) -include $(CXX_DEPS) endif ifneq ($(strip $(CPP_DEPS)),) -include $(CPP_DEPS) endif ifneq ($(strip $(C_DEPS)),) -include $(C_DEPS) endif endif -include ../makefile.defs # Add inputs and outputs from these tool invocations to the build variables # All Target all: BitmapFileHeaders # Tool invocations BitmapFileHeaders: $(OBJS) $(USER_OBJS) @echo 'Building target: $@' @echo 'Invoking: MacOS X C++ Linker' g++ -o "BitmapFileHeaders" $(OBJS) $(USER_OBJS) $(LIBS) #"make print-OBJS", in command prompt, gives: #OBJS = ./src/Fractal Creator - Hello World.o @echo 'Finished building target: $@' @echo ' ' # Other Targets clean: -$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(OBJS)$(C_UPPER_DEPS)$(CXX_DEPS)$(CPP_DEPS)$(C_DEPS) BitmapFileHeaders -@echo ' ' .PHONY: all clean dependents .SECONDARY: -include ../makefile.targets 

Debug/src ,有Fractal.o 。 如果我尝试./Fractal.o ,我得到bash: ./Fractal.o: cannot execute binary file: Exec format error 。 然而file Fractal.o给出

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

但是,我有Ubuntu 15.10,这是64位,所以这应该运行,对不对? 我没有写这个代码,所以我不知道作者是这样写的。 如果我可以通过查找$(OBJS)位置来改变二进制文件的格式, $(OBJS)吗? 如果是这样,我怎么find$(OBJS)在哪里?

该文件不可执行 。 尝试例如file /bin/ls ,它会给:

 /bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.26, BuildID[sha1]=0x55f1e005df252708d4c456dcc2c7dccea1006553, stripped 

请注意,它明确指出这是一个可执行文件。

ELF文件有不同的风格,你在Fractal.o得到的是一个对象文件,它需要链接来产生一个可执行文件(通常一个对象文件将包含未解决的符号,这将在链接时解析)。 其他常见的口味是共享对象(即.so文件)和核心转储。 每种口味都以不同的方式使用。