这可能是 makefile error: undefined reference to main 的复制品或 Undefined reference in main Makefile或其他几个。 crc64 和 getWord 都是 mainProg 的支持文件,其中包含我的主要功能。当我尝试运行我的 make 文件时,我收到以下关于 crc64.o 规则的编译错误。在 c 文件中,我有这篇文章中列出的 include 语句和头文件 Creating your own header file in C所以我不应该有与将 header 链接到正文相关的链接错误。
错误:
gcc -g -Wall -std=c99 crc64.o -o crc64
/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o:在函数“_start”中:
(.text+0x20): 对“main”的 undefined reference
collect2:错误:ld 返回 1 退出状态
生成文件
CC=gcc
COPTS=-g -Wall -std=c99
ALL=crc64 getWord mainProg
all: $(ALL)
crc64: crc64.o
$(CC) $(COPTS) $^ -o $@
getWord: getWord.o
$(CC) $(COPTS) $^ -o $@
mainProg: getWord.o crc64.o mainProg.o
$(CC) $(COPTS) $^ -o $@
crc64.o: crc64.c crc64.h
getWord.o: getWord.c getWord.h
mainProg.o: mainProg.c getWord.h crc64.h
.c.o:
$(CC) -c $(COPTS) $<
最佳答案
您正在编译 crc64
和 getWord
就好像它们是可执行文件一样。因此,他们需要一个 main
函数。
只需删除这两个目标即可。你不需要它们。
另请参阅@mafso 的评论:您应该使用 COPTS
中的 CFLAGS
,以确保相关的 implicit rules选择相同的选项。
关于c - "Undefined reference to main"与 main 在单独的脚本/规则中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954255/