c - undefined reference 可能是 makefile 错误?

标签 c 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'  

最佳答案

您得到的错误是链接器错误,告诉您在链接您的程序时链接器找不到名为“CreateSet”的函数(等等)。为什么会这样并不是很明显,因为您似乎在构建命令中包含了“set.o”。

要解决构建问题,弄清楚 make 试图做什么,然后一次一个地单独运行命令,这样您就可以看到哪里出了问题,这通常很有用。 “make -n”将向您显示“make”将运行哪些命令,而无需实际执行它们。我希望看到如下命令:

gcc -o proj1 main.o set.o

尝试手动运行它,看看它能给你带来什么。

关于c - undefined reference 可能是 makefile 错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4130681/

相关文章:

c++ - X509_get0_notBefore 和 X509_get0_noAfter 在此范围内?

c - OpenCL:具有内核离线编译的共享库,可能吗?

c++ - dyld : Library not loaded: libqscintilla2. 5.dylib

linux - Pkg-config 路径在正确的目录中查找,但未找到 .pc 文件

c - 如何通过scanf为opencv中的cvloadimage提供文件名

objective-c - 有没有办法使用 CFNetwork 从 ftp 服务器删除文件/文件夹?

c - 在c编程中使用gets是错误的

c - Linux 在崩溃时自动重启应用程序 - 守护进程

build - 如何从 cmake 中的列表中删除标记?

c++ - 涵盖接口(interface)的Makefile(.h文件)