未定义的引用也许makefile是错误的?
问题描述:
我之前在声明我的数组记录时遇到了一些问题。现在我认为我的Makefile或其他东西有问题。未定义的引用也许makefile是错误的?
Here is my 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'
答
的错误,你得到的链接错误,告诉你链接您的程序链接器找不到名为“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
可能有一个默认值,这就是为什么这么多工作。
+0
修正了这个问题。格式化,当我提交的职位。 – Jeremy 2010-11-09 05:21:14
答
请main.c中确保您已set.h
你也宣告EEXEC但使用EXEC ...
突出显示并按0101按钮进行代码格式化:) – 2010-11-09 05:17:41
修复了大部分问题。仍然在使用格式。 – Jeremy 2010-11-09 05:19:18