C 对pthread的未定义引用
我想编译一个使用线程的程序。我使用了C 对pthread的未定义引用,c,multithreading,makefile,compilation,C,Multithreading,Makefile,Compilation,我想编译一个使用线程的程序。我使用了#include库,但是当我使用make文件编译它时,我得到了以下错误: file.c:(.text+0x378): undefined referece to `pthread_create` file.c:(.text+0x3ad): undefined referece to `pthread_join` 使用-lpthread标志,使用正常的gcc编译器,程序运行正常 我正在使用的make文件的源: CC=gcc COMPILE.c=$(CC) $
#include
库,但是当我使用make文件编译它时,我得到了以下错误:
file.c:(.text+0x378): undefined referece to `pthread_create`
file.c:(.text+0x3ad): undefined referece to `pthread_join`
使用-lpthread
标志,使用正常的gcc
编译器,程序运行正常
我正在使用的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}
我已在make文件中设置了
-lpthread
标志,但该标志不起作用,我应该在make文件中进行哪些更改?您对LINK.c
的替换错误。无法将库添加到此中,因为这意味着它们首先出现在链接行上
如果您向我们展示make的输出,除了makefile之外,我们可能会更快地看到它。像-lpthread
这样的库必须位于链接行的末尾,位于可能需要使用库的任何对象之后
正如我在评论中提到的,您应该删除LINK.c
设置并添加:
CFLAGS = -pthread
这应该足够好了。如果确实需要添加库,则应使用LDLIBS
如下所示:
LDLIBS = -lpthread
不替换
LINK.c
变量。只需使用-pthread而不是-lphread什么操作系统?什么编译器?你可能需要在CFLAGS变量上做,我不确定。如果我要手动编译它,请参见:您必须在编译行和链接行中添加-pthread
。所以添加CFLAGS=-pthread
。您可以从链接行中删除-lpthread