我想编译一个使用线程的程序。我使用#include <pthread.h>
库,但是当使用我的make文件编译它时,出现以下错误:
file.c:(.text+0x378): undefined referece to `pthread_create`
file.c:(.text+0x3ad): undefined referece to `pthread_join`
使用gcc
标志使用常规-lpthread
编译器,程序可以正常运行
我正在使用的Make文件的来源:
CC=gcc
COMPILE.c=$(CC) $(CFLAGS) $(CPPFLAGS) -c
LINK.c=$(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -lpthread
CFLAGS = -Wall -O -I$(dir $(LIBLAB))
TEMPFILES = core core.* *.o temp.* *.out typescript*
all:
@echo "Please compile directly the intended programs by name"
clean:
rm -f ${TEMPFILES}
我已经在制作文件中设置了-lpthread
标志,但是没有用,我应该在制作文件中进行哪些更改?
答案 0 :(得分:1)
您对LINK.c
的替换是错误的。您不能为此添加库,因为这意味着它们会首先出现在链接行上。
如果您向我们展示了make的输出,除了makefile,我们可能会更快地看到它。诸如-lpthread
之类的库必须位于链接线的 end 处,在可能需要使用该库的任何对象之后。
正如我在评论中提到的,您应该删除LINK.c
设置并添加:
CFLAGS = -pthread
那应该足够了。如果确实需要添加库,则应像这样使用LDLIBS
:
LDLIBS = -lpthread
不替换LINK.c
变量。