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
在这里插入图片描述
情况相似,也是25行报错,但是他好好的看了一下编译器的信息(看的比我全),他说的编译器意思如下:
他的main函数重复定义了,
然后main第一次定义出现在哪个文件哪一行
然后就是后面两行上面提到的信息。

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

what???冷静了一下,看了看我自己的编译器
在这里插入图片描述
还真的就是这样,只不过不是函数,而是一个全局变量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、被编译器小小的坑了一下

  • 80
    点赞
  • 107
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值