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中的所有函数都存在此问题 错误:

我试图编译一个源文件,但在一个不存在的目录中遇到了多定义错误

情况如下:

  • 我正在编译一个程序,我们称之为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命令没有删除该库,它只是一个旧库