不存在的目录中的多个定义

时间:2015-02-25 03:52:42

标签: c directory header-files multiple-definition-error

我正在尝试编译源文件,并且我在不存在的目录中遇到了多重定义错误。

以下是这种情况:

  1. 我正在编译程序,我们称之为prog1.c。这个程序编译好
  2. 我可以将其他程序(prog2.c,prog3.c)链接到此库而不会出现问题
  3. 当我尝试将静态库链接到prog1.c时,我得到一个多重定义错误,其中冲突函数的第一个定义来自一个不存在的目录
  4. 这里有什么奇怪之处:<​​/ p>

    1. 目录... / lab5 / util / list.c不存在! (参见下面的错误代码)
    2. 我的list.c中只有一部分函数被定义了多次。并非list.o中的所有功能都有此问题
    3. ERROR:

      ../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:

      # 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下工作正常。

1 个答案:

答案 0 :(得分:0)

我明白了。我无法相信我犯了如此微不足道的错误。我的Make:clean命令没有删除该库,它只是一个正在使用的旧库