多函数定义错误生成文件
Multiple Function Definition Error Makefile?
所以这应该不会带来太多麻烦,但我正在尝试使用通配符运算符创建一个更高效的makefile,而不是我过去使用的繁琐方法,即遍历并创建每个单独的对象文件,然后将它们链接在一起。但是,无论出于什么原因,每当我试图运行"make"时,它都会给我这个:
multiple definition of 'ScreenMgr::ScreenMgr()'
/path/to/ScrenMgr.cpp:4: first defined here
然后它也给了我另一个错误,紧接着这个错误说:
undefined reference to main
collect2: error: ld returned 1 exit status
尽管在出现这些错误之前,我的.o是生成的,并放置在正确的目录中,所以错误必须与链接器有关。如果有人认为这会有所帮助,我可以包括c++源代码,但文件实际上是空的(尽管我仍然安装了头保护(,因为我只想首先确保所有内容都正确链接,这样我就可以处理这样的问题,而不必担心代码。目录结构看起来像:
-MsSolver
|--src
| |--main.cpp
| |--ScreenMgr.cpp
|--include
| |--ScreenMgr.h
|--build #empty directory
|
|--Makefile
|:
|--bin
这是生成文件:
CC:=g++
DEBUG:=-g
CFLAGS:=-Wall $(DEBUG)
LDFLAGS:=-Wall $(DEBUG)
SRCDIR:=$(PWD)/src
BUILDDIR:=$(PWD)/build
INCDIR:=$(PWD)/include
BINDIR:=$(PWD)/bin
FILES:=ScreenMgr main
INCLUDES:=-I$(INCDIR)
SRCS:=$(patsubst %,$(SRCDIR)/%.cpp,$(FILES))
OBJS:=$(patsubst %,$(BUILDDIR)/%.o,$(FILES))
LIBS:=-lX11
TARGET:=mssolver
#create executable and link
$(BINDIR)/$(TARGET): $(OBJS)
$(CC) $(LFLAGS) $(INCLUDES) $(LIBS) $(OBJS) -o $@
#Compile objs
$(BUILDIR)/%.o: $(SRCS)
$(CC) $(CFLAGS) -c $< -o $@
clean:
rm -f $(BUILDDIR)/*.o $(BINDIR)/*.o $(INCDIR)/*.swp $(SRCDIR)/*.swp
$(BUILDIR)/%.o: $(SRCS)
这行告诉make
,它可以从所有源文件构建任何.o文件。
$(CC) $(CFLAGS) -c $< -o $@
在这一行中,$<
表示第一个依赖项,即$(SRCS)
中的第一个源文件,即src/ScreenMgr.cpp
。
所以Make基本上会这样做来构建对象文件:
$(CC) $(CCFLAGS) -c src/ScreenMgr.cpp -o build/ScreenMgr.o
$(CC) $(CCFLAGS) -c src/ScreenMgr.cpp -o build/main.o
$(CC) $(LFLAGS) $(INCLUDES) $(LIBS) build/ScreenMgr.o build/main.o -o bin/mssolver
根据.o文件的名称,您可能认为它工作正常。。。但事实并非如此,它实际上是在链接ScreenMgr.cpp的两个"副本",而不是链接main.cpp!
更改为:
$(BUILDDIR)/%.o: $(SRCDIR)/%.cpp
相反。
相关文章:
- C++系统找不到指定的文件错误
- C++语法头文件错误
- C++生成文件错误"implicit entry/start for main executable"
- C++/生成文件错误:未定义对"main"的引用
- VS2019:资源文件错误:中性(默认)(未知子语言:0x8)
- C++程序不制作文件(错误)
- 安卓工作室 |CPP 文件错误错误: 位图库中对"AndroidBitmap_unlockPixels"的未定义引用
- "what does ":*** [可执行文件] 错误 1 " mean ?"
- 如何修复使用VScode调试器gcc调试时的"找不到文件"错误
- 在课堂上创建了一个朋友,给出"无输入文件"错误
- Qt .exe文件错误
- c++ 添加具有写入文件错误的文本变量
- 无法转换 .CATPart 文件.错误:输入文件路径似乎包含不支持的字符
- 写入文本文件错误,QT
- C++写入文件错误
- Windows Subsystem for Linux (WSL) 下的间歇性随机"找不到文件"错误
- 犰狳读取MAT文件错误
- 无法求解FullPathForFilename:COCOS2DX中可能缺少文件错误
- C Wininet FTP列出了许多文件错误
- 生成文件错误 - 找不到文件 - *.cpp