Неопределенная ссылка может быть makefile ошибочна?
у меня были некоторые проблемы ранее с объявлением моего набора записей массива. Теперь я думаю, что что-то не так с моим Makefile или что-то в этом роде.
вот мой Makefile:
EEXEC = proj1
CC = gcc
CFLAGS = -c -Wall
$(EXEC) : main.o set.o
$(CC) -o $(EXEC) main.o set.o
main.o : main.h main.c
$(CC) $(CFLAGS) main.c
set.o : set.h set.c
$(CC) $(CFLAGS) set.c
есть больше функций, которые у меня есть в моем наборе.C файл, но это функции, которые я тестирую на данный момент:
DisjointSet *CreateSet(int numElements);
DisjointSet *MakeSet(DisjointSet *S,int ele, int r);
void Print(DisjointSet *S);
и ошибки, которые я получаю в терминале:
main.o: In function `main':
main.c:(.text+0x19): undefined reference to `CreateSet'
main.c:(.text+0x43): undefined reference to `MakeSet'
main.c:(.text+0x5f): undefined reference to `Print'
3 ответов
ошибки, которые вы получаете, являются ошибками компоновщика, сообщая вам, что при связывании вашей программы компоновщик не может найти функцию с именем "CreateSet" (и т. д.). Не сразу понятно, почему это должно быть так, потому что кажется, что вы включаете "set.o " в команде сборки.
для устранения неполадок сборки часто полезно выяснить, что make пытается сделать, а затем запускать команды по отдельности по одному, чтобы вы могли видеть, где все идет не так. "делать - n "покажет вам, какие команды "make" будут выполняться, фактически не выполняя их. Я ожидал бы увидеть такую команду, как:
gcc -o proj1 main.o set.o
попробуйте запустить это вручную и посмотреть, куда он вас приведет.
если они все на одной строке в файле makefile:
EEXEC = proj1 CC = gcc CFLAGS = -c -Wall
затем у вас есть один макрос EEXEC
стоимость которого составляет proj1 CC = gcc CFLAGS = -c -Wall
, а вы нет CC
или CFLAGS
макрос. CC
вероятно, имеет значение по умолчанию,поэтому это работает.