"未定义的主要引用"与main在单独的脚本/规则中

Cod*_*key 0 c linux gcc makefile

这可能是makefile错误的重复:主Makefile中的mainUndefined引用的未定义引用或其他一些引用.crc64和getWord都支持mainProg文件,其中包含我的main函数.当我尝试运行我的make文件时,我收到以下有关crc64.o规则的编译错误.在c文件中,我有在这篇文章中列出的include语句和头文件在C中创建自己的头文件所以我不应该有与链接头到主体相关的链接错误.

错误: gcc -g -Wall -std=c99 crc64.o -o crc64 /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/crt1.o: In function ``_start': (.text+0x20): undefined reference to ``main' collect2: error: ld returned 1 exit status
Makefile

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) $<
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 7

您正在编译crc64,getWord就像它们是可执行文件一样.因此,他们需要一个main功能.

只需删除这两个目标.你不需要它们.

另请参阅@ mafso的评论:你应该使用CFLAGS的instrad COPTS,以确保有关潜规则拿起相同的选项.