gpt4 book ai didi

c - (.text+0x20) : undefined reference to `main' and undefined reference to function

转载 作者:太空狗 更新时间:2023-10-29 16:37:52 24 4
gpt4 key购买 nike

我在让我的 makefile 正常工作时遇到问题。我遇到的第一个问题是对 main 的 undefined reference 。我的 producer.c 文件中有 main 作为函数。第二个问题是对 SearchCustomer() 的 undefined reference 。

错误:

bash-4.1$ make
gcc -Wall -c producer.c shared.h
gcc -Wall -c consumer.c shared.h
gcc -Wall -c AddRemove.c shared.h
gcc -pthread -Wall -o producer.o consumer.o AddRemove.o
/usr/lib/gcc/x86_64-redhat-linux/4.4.7/../../../../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
AddRemove.o: In function `AddRemove':
AddRemove.c:(.text+0xb1): undefined reference to `SearchCustomer'
AddRemove.c:(.text+0x1e9): undefined reference to `SearchCustomer'
AddRemove.c:(.text+0x351): undefined reference to `SearchCustomer'
collect2: ld returned 1 exit status
make: *** [producer] Error 1

生成文件:

COMPILER = gcc
CCFLAGS = -Wall
all: main

debug:
make DEBUG=TRUE


main: producer.o consumer.o AddRemove.o
$(COMPILER) -pthread $(CCFLAGS) -o producer.o consumer.o AddRemove.o
producer.o: producer.c shared.h
$(COMPILER) $(CCFLAGS) -c producer.c shared.h
consumer.o: consumer.c shared.h
$(COMPILER) $(CCFLAGS) -c consumer.c shared.h
AddRemove.o: AddRemove.c shared.h
$(COMPILER) $(CCFLAGS) -c AddRemove.c shared.h


ifeq ($(DEBUG), TRUE)
CCFLAGS += -g
endif

clean:
rm -f *.o

最佳答案

这条规则

main: producer.o consumer.o AddRemove.o
$(COMPILER) -pthread $(CCFLAGS) -o producer.o consumer.o AddRemove.o

错了。它说要创建一个名为 producer.o 的文件(使用 -o producer.o),但您想要创建一个名为 main 的文件。请原谅大喊大叫,但始终使用 $@ 来引用目标:

main: producer.o consumer.o AddRemove.o
$(COMPILER) -pthread $(CCFLAGS) -o $@ producer.o consumer.o AddRemove.o

正如 Shahbaz 正确指出的那样,gmake 专业人员也会使用 $^,它扩展到规则中的所有先决条件。一般来说,如果您发现自己重复了一个字符串或名称,那么您做错了,应该使用一个变量,无论是内置变量还是您创建的变量。

main: producer.o consumer.o AddRemove.o
$(COMPILER) -pthread $(CCFLAGS) -o $@ $^

关于c - (.text+0x20) : undefined reference to `main' and undefined reference to function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20514587/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com