Множественное определение в несуществующем каталоге
Я пытаюсь скомпилировать исходный файл, и я сталкиваюсь с ошибкой множественного определения в каталоге, который не существует.
Вот ситуация:
- Я собираю программу, назовем ее 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:
# 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 не удаляла библиотеку, а использовалась просто старая библиотека