makefile文件格式无法识别

时间:2017-11-23 20:23:56

标签: c makefile

我做错了什么? 你能发送一些有用的链接,让我的makefile工作变得更轻松,更好吗?

get_next_line.o: file not recognized: File format not recognized
collect2: error: ld returned 1 exit status
Makefile:27: recipe for target 'gnl' failed
make: *** [gnl] Error 1

+++

SRC = gnl.c
OBJ = $(SRC:.c=.o)
INCLUDES = gnl.h
NAME = gnl
CFLAGS = -Wall -Werror -Wextra
CC = gcc
DIR = LIBFT

%.o: %.c $(SRC) $(INCLUDES)
        $(CC) $(CFLAGS) -c $<

all: $(NAME)

$(NAME): $(OBJ)
        make -C $(DIR)
        $(CC) $(CFLAGS) -o $(NAME) $(OBJ) -L. $(DIR)/libft.a
clean:
        make clean -C $(DIR)
        rm -f $(OBJ)

fclean:
        make fclean -C $(DIR)
        rm -f $(NAME)

re: fclean all

4 个答案:

答案 0 :(得分:2)

这本身不是make错误。它说

get_next_line.o: file not recognized: File format not recognized

所以 是你的问题。不知何故,您设法在您的目录中有一个.o文件已损坏。删除它,事情会变得更好。

答案 1 :(得分:1)

您误解了错误消息。错误消息是指文件 get_next_line.o ,而不是makefile。

链接器( ld )报告的错误不是 make 。失败的命令是目标gnl

答案 2 :(得分:0)

我最近遇到了这个错误,我有一些建议可能会有所帮助。我的问题不是一个糟糕的.o文件,而是一个32位安装而不是64位安装。如果您也是这种情况,那么通过尝试此解决方案可能会获得更完整的功能。

就我而言,makefile(s)需要不同的CFLAGS,具体取决于安装是64位还是32位。以下是我尝试make项目的README中的一些行。

  

By default, the C/C++ software are compiled in 32 bits with the options (-Os) but can be compiled in 64 bits, -m64 is added to the CFLAGS variable in <certain makefiles in the project are listed>

我的建议是先尝试将-m64添加到CFLAGS。如果这不起作用,请删除-m64并将其替换为-Os

即,首先尝试使用以下行:

CFLAGS = -g3 -Wall -Wextra -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED -m64

然后,从命令行运行

make clean

紧跟用于安装的make命令。

如果这不起作用,请将有问题的行更改为

CFLAGS = -g3 -Wall -Wextra -fPIC -DREPLICATION_ENABLED -DJOURNALING_ENABLED -Os

然后make clean和其他make内容。

如果某些C对象是64位且有些是32位(我不知道这种情况是否确实存在),您可能需要做一些不同的事情。

这适用于我的案例,您可以看到here的详细信息。

如果有效,请发表评论告诉我。

答案 3 :(得分:0)

它甚至可以更简单... 这只是发生在我的Makefile中。 在创建可执行文件的行(在Makefile中)中,对象.o的名称不同,其中有一个错字。我保留了.cu(CUDA格式)文件的名称,而不是.o。