首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“对main的未定义引用”,并在单独的脚本/规则中使用main

“对main的未定义引用”,并在单独的脚本/规则中使用main
EN

Stack Overflow用户
提问于 2015-01-14 23:16:54
回答 2查看 267关注 0票数 0

这可能是makefile error: undefined reference to mainUndefined reference in main Makefile或其他几个方面的杜普。crc64和getWord都支持mainProg文件,其中包含了我的主要功能。当我试图运行我的make文件时,我会看到下面有关crc64.o规则的编译错误。在c文件中,我在本文中列出了Creating your own header file in 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

代码语言:javascript
复制
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) $<
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-14 23:19:41

您正在编译crc64getWord,就好像它们是可执行文件一样。因此,它们需要一个main函数。

只需移除这两个目标。你不需要他们。

还请参阅@mafso的评论:您应该使用CFLAGS instrad of COPTS,以确保相关的implicit rules选择相同的选项。

票数 7
EN

Stack Overflow用户

发布于 2015-01-14 23:58:39

代码语言:javascript
复制
The following makefile would (probably) be just what your project needs
note: be sure to replace '<tab>' with the tab character


CC=gcc

COPTS := -g -Wall -Wextra -Wpedantic -std=c99

LOPTS := -g

TARGET := mainProg

SRCS := $(wildcard:*.c)
OBJS := $(SRCS:.c=.o)
HDRS := $(SRCS:.c=.h)

.PHONY: all

all: ${TARGET} 

${TARGET}: $(OBJS)
<tab>$(CC) $(COPTS) $^ -o $@

.c.o: #{HDRS}
<tab>$(CC) -c $(COPTS) -o $^ $<
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27954255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档