对pthread的未定义引用

时间:2020-06-09 15:27:30

标签: c multithreading makefile compilation

我想编译一个使用线程的程序。我使用#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标志,但是没有用,我应该在制作文件中进行哪些更改?

1 个答案:

答案 0 :(得分:1)

您对LINK.c的替换是错误的。您不能为此添加库,因为这意味着它们会首先出现在链接行上。

如果您向我们展示了make的输出,除了makefile,我们可能会更快地看到它。诸如-lpthread之类的库必须位于链接线的 end 处,在可能需要使用该库的任何对象之后。

正如我在评论中提到的,您应该删除LINK.c设置并添加:

CFLAGS = -pthread

那应该足够了。如果确实需要添加库,则应像这样使用LDLIBS

LDLIBS = -lpthread

不替换LINK.c变量。

相关问题