Множественное определение в несуществующем каталоге

Я пытаюсь скомпилировать исходный файл, и я сталкиваюсь с ошибкой множественного определения в каталоге, который не существует.

Вот ситуация:

  1. Я собираю программу, назовем ее prog1.c. Эта программа прекрасно компилируется
  2. Я могу связать другие программы (prog2.c, prog3.c) с этой библиотекой без проблем
  3. Когда я пытаюсь связать статическую библиотеку с prog1.c, я получаю ошибку множественного определения, где первое определение конфликтующей функции происходит из несуществующего каталога

Вот что странно:

  1. Каталог.../lab5/util/list.c не существует! (См. Код ошибки ниже)
  2. Только подмножество моих функций из моего 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:

# 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 ответ

Я понял. Я не могу поверить, что сделал такую ​​тривиальную ошибку. Моя команда Make: clean не удаляла библиотеку, а использовалась просто старая библиотека

Другие вопросы по тегам