makefile несколько ошибок определения - PullRequest
0 голосов
/ 11 марта 2019

Ниже приведена ошибка, которую я получаю при запуске make-файла:

 gcc ./bin/sortMe.o ./bin/compare_id_ascending.o ./bin/compare_id_descending.o ./bin/compare_name_ascending.o ./bin/compare_name_descending.o ./bin/compare_money_ascending.o ./bin/compare_money_descending.o -o sortMe
./bin/compare_money_descending.o: In function `compare_money_ascending':
compare_money_descending.c:(.text+0x0): multiple definition of `compare_money_ascending'
./bin/compare_money_ascending.o:compare_money_ascending.c:(.text+0x0): first defined here
./bin/sortMe.o: In function `main':
sortMe.c:(.text+0x59f): undefined reference to `compare_money_descending'
collect2: error: ld returned 1 exit status
makefile:11: recipe for target 'sortMe' failed
make: *** [sortMe] Error 1

Вот как выглядит мой make-файл:

CC = gcc
CFLAGS = -ansi -Wall -I$(IDIR)

IDIR = ./include/
SDIR = ./src/
BDIR = ./bin/

all : sortMe

sortMe : $(BDIR)sortMe.o $(BDIR)compare_id_ascending.o $(BDIR)compare_id_descending.o $(BDIR)compare_name_ascending.o $(BDIR)compare_name_descending.o $(BDIR)compare_money_ascending.o $(BDIR)compare_money_descending.o
    $(CC) $(BDIR)sortMe.o $(BDIR)compare_id_ascending.o $(BDIR)compare_id_descending.o $(BDIR)compare_name_ascending.o $(BDIR)compare_name_descending.o $(BDIR)compare_money_ascending.o $(BDIR)compare_money_descending.o -o $@

$(BDIR)sortMe.o : $(SDIR)sortMe.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)sortMe.c -o $@

$(BDIR)compare_id_ascending.o : $(SDIR)compare_id_ascending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_id_ascending.c -o $@

$(BDIR)compare_id_descending.o : $(SDIR)compare_id_descending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_id_descending.c -o $@

$(BDIR)compare_name_ascending.o : $(SDIR)compare_name_ascending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_name_ascending.c -o $@

$(BDIR)compare_name_descending.o : $(SDIR)compare_name_descending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_name_descending.c -o $@

$(BDIR)compare_money_ascending.o : $(SDIR)compare_money_ascending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_money_ascending.c -o $@

$(BDIR)compare_money_descending.o : $(SDIR)compare_money_descending.c $(IDIR)compareElements.h $(IDIR)compareFunctions.h
    $(CC) $(CFLAGS) -c $(SDIR)compare_money_descending.c -o $@

run :
    ./sortMe

clean :
    rm ./bin/*.o ./sortMe

Эти ошибки действительно смущают меня, и я был бы признателен, если бы кто-то указал на мою ошибку. Кроме того, нужно ли мне добавлять $ (BDIR) $ (SDIR) и $ (IDIR) везде, где я их объявляю?

1 Ответ

2 голосов
/ 11 марта 2019

Сообщения об ошибках:

./bin/compare_money_descending.o: In function `compare_money_ascending':
compare_money_descending.c:(.text+0x0): multiple definition of `compare_money_ascending'

говорит, что исходный файл compare_money_descending.c содержит определение compare_money_ascending, хотя его предварительное определение уже существует. Поскольку имя файла compare_money_descending.c предполагает, что оно содержит функцию с именем compare_money_descending, но мы получаем ошибку о compare_money_ascending, вполне вероятно, что ошибка compare_money_descending.c содержит определение с использованием имени функции compare_money_ascending, где compare_monehy_descending был предназначен. Вполне вероятно, что вы скопировали и вставили исходный код для использования в качестве новой функции, но забыли изменить имя.

Второе сообщение:

sortMe.c:(.text+0x59f): undefined reference to `compare_money_descending'

говорит нам, что программа не содержит определения compare_money_descending, что подтверждает приведенную выше гипотезу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...