C 不存在目录中的多个定义
我试图编译一个源文件,但在一个不存在的目录中遇到了多定义错误 情况如下:C 不存在目录中的多个定义,c,directory,header-files,multiple-definition-error,C,Directory,Header Files,Multiple Definition Error,我试图编译一个源文件,但在一个不存在的目录中遇到了多定义错误 情况如下: 我正在编译一个程序,我们称之为prog1.c。这个程序编译得很好 我可以毫无疑问地将其他程序(prog2.c、prog3.c)链接到此库 当我尝试将静态库链接到prog1.c时,会出现一个多定义错误,其中冲突函数的第一个定义来自一个不存在的目录 奇怪的是: 目录…/lab5/util/list.c不存在!(请参阅下面的错误代码) 我的list.c中只有一部分函数被多次定义。并非list.o中的所有函数都存在此问题 错误:
../util/libname.a(prog.o): In function 'function1':
.../dir_ok/util/prog.c:42: multiple definition of 'function1' // dir_ok exists
../util/libname.a(prog.o): .../dir_foo/util/prog.c:41: first defined here // dir_foo exists, but there is no dir_foo/util.
生成文件:
# Makefile
# Flags
CC = gcc
CFLAGS = -g -Wall -pedantic -std=c11
CLEANLOC=src
#directory names
VPATH = ./:./src/:../util/
UTILDIR = ../util/
UTILFLAG = -llibnameutil
UTILLIB = $(UTILDIR)liblibnameutil.a
UTILC = list of .c, including prog.c that gives the error
UTILH = list of .h, including prog.h that gives the error
EXEC = foo
OBJS = foo.o
SRCS = foo.c, foo.h
.PHONY: all
all: $(EXEC)
$(EXEC): $(OBJS) $(UTILLIB)
$(CC) $(CFLAGS) $^ -o $@ -L$(UTILDIR) $(UTILFLAG)
$(UTILLIB): $(UTILC) $(UTILH)
cd $(UTILDIR); make;
$(OBJS): $(SRCS)
$(CC) $(CFLAGS) -c $^
从概念上讲,这里的问题是什么?如果需要,我愿意发布更多代码。我认为问题出在我的prog1.c中,因为prog2.c和prog3.c都可以很好地使用静态库和prog.o.我已经解决了。我不敢相信我犯了这么小的错误。我的Make:clean命令没有删除该库,它只是一个旧库