Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 对pthread的未定义引用_C_Multithreading_Makefile_Compilation - Fatal编程技术网

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