我做错了什么? 你能发送一些有用的链接,让我的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
答案 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。