Неопределенная ссылка, возможно, makefile не так? - PullRequest
6 голосов
/ 09 ноября 2010

У меня раньше были некоторые проблемы с объявлением набора записей моего массива.Теперь я думаю, что с моим 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   

В моем файле set.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 ]

6 голосов
/ 09 ноября 2010

Ошибки, которые вы получаете, являются ошибками компоновщика, которые говорят вам, что при компоновке вашей программы компоновщик не может найти функцию с именем «CreateSet» (и т. Д.).Не сразу понятно, почему это так, потому что кажется, что вы включили «set.o» в команду сборки.

Для устранения проблем сборки часто полезно выяснить, что пытается сделать make.сделать, а затем запустить команды по отдельности по одной, чтобы вы могли видеть, где что-то идет не так.«make -n» покажет вам, какие команды «make» будет запускаться, фактически не выполняя их.Я ожидаю увидеть такую ​​команду, как:

gcc -o proj1 main.o set.o

, попробуйте запустить ее вручную и посмотреть, куда она вас приведет.

0 голосов
/ 09 ноября 2010

Убедитесь, что вы включили set.h в main.cТакже вы объявляете EEXEC, но используете EXEC ...

0 голосов
/ 09 ноября 2010

Если все они находятся в одной строке в файле makefile:

EEXEC = proj1 CC = gcc CFLAGS = -c -Wall

Тогда у вас есть один макрос EEXEC со значением proj1 CC = gcc CFLAGS = -c -Wall, и у вас нет макроса CC или CFLAGS. CC, вероятно, имеет значение по умолчанию, поэтому так много работает.

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