recipe for target '项目1.exe' failed 原因分析与解决

背景: 期末实现B树,多文件编程。


CodeBlock上出现了如下报错

在这里插入图片描述
ld returned 1 exit status这个报错以前遇到过,是因为之前运行的程序没有关闭,关闭后即可通过编译

但是这里我并没有正在运行的程序窗口,所以并不是这个原因。

搜索引擎搜索,尝试了很多方法,无果。


编译器的信息量太少,无从debug,猜测是CodeBlock的问题,改用dev试一下。

dev上出现了如下报错

# Project: 项目1
# Makefile created by Dev-C++ 5.11

CPP      = g++.exe -D__DEBUG__
CC       = gcc.exe -D__DEBUG__
WINDRES  = windres.exe
OBJ      = B_tree.o main.o
LINKOBJ  = B_tree.o main.o
LIBS     = -L"D:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -L"D:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/lib" -static-libstdc++ -static-libgcc -g3
INCS     = -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/include" -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include"
CXXINCS  = -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/include" -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"D:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include/c++"
BIN      = 项目1.exe
CXXFLAGS = $(CXXINCS) -g3
CFLAGS   = $(INCS) -g3
RM       = rm.exe -f

.PHONY: all all-before all-after clean clean-custom

all: all-before $(BIN) all-after

clean: clean-custom
	${RM} $(OBJ) $(BIN)

$(BIN): $(OBJ)
	$(CPP) $(LINKOBJ) -o $(BIN) $(LIBS)

B_tree.o: B_tree.cpp
	$(CPP) -c B_tree.cpp -o B_tree.o $(CXXFLAGS)

main.o: main.cpp
	$(CPP) -c main.cpp -o main.o $(CXXFLAGS)

第二十五行标红,编译器提示

25 C:\Users\ASUS\Desktop\Makefile.win recipe for target '项目1.exe' failed
没见过的报错,搜索引擎搜索,看了很多文章,主要说了以下几种解决方法:
1、关闭杀毒软件……等等(我觉得没有什么关系)
2、任务管理器结束collect2.exe(我在任务管理器里面没看到)
3、其他一些属性上的设置(有的试了无果,有的不敢试)

后来看到一篇文章IT之屋的某篇博文 ,链接如下:http://www.it1352.com/369267.html
recipe for target '项目1.exe' failed 原因分析与解决_第1张图片
情况相似,也是25行报错,但是他好好的看了一下编译器的信息(看的比我全),他说的编译器意思如下:
他的main函数重复定义了,
然后main第一次定义出现在哪个文件哪一行
然后就是后面两行上面提到的信息。

他的解决方法就是把重复的那个main删了

what???冷静了一下,看了看我自己的编译器
recipe for target '项目1.exe' failed 原因分析与解决_第2张图片
还真的就是这样,只不过不是函数,而是一个全局变量m在用多文件编译的时候重复定义了。

这时候看一下我的代码
main.cpp

…………
#include "b_tree.h"
int main()
{
…………

B_tree.h

#ifndef B_TREE_H_INCLUDED
#define B_TREE_H_INCLUDED
#define KeyType int
…………
int m = 3;//全局变量m, 指m阶B树
typedef struct BTNode
{
…………

B_tree.cpp

#include "head.h"
bool Creat_btree(BTree &T)//创建一个空的B树
{
…………

修改一下
main.cpp

int m = 3;//全局变量m, 指m阶B树

B_tree.h

extern int m;

B_tree.cpp不用修改

BUG解决,正常运行。


查到的那篇博文是mian函数写重复了,而我是一个变量重复了,那你有可能是其他东西重复了,或者其他不是因为重复而编译失败的bug,所以遇到recipe for target '项目1.exe' failed,看看上面有说到什么,解决方案就是:实事求是,因地制宜,就事论事。

吐槽一句,CodeBlock的编译器真菜,那么一句提示信息量太少,debug无从下手,dev都做的比它好。

反思

1、犯了糊涂,因为自己多文件编译不熟而写出来的bug,还debug了两个小时。

2、没有认真去看编译器的提示。自己选择性失明了,编译器四条信息我就盯着后面两条在搜,真糊涂。

3、太依赖搜索引擎,一个劲查,没想着自己解决。

4、被编译器小小的坑了一下

你可能感兴趣的:(recipe for target '项目1.exe' failed 原因分析与解决)