gpt4 book ai didi

c - 对 pthread_create 和 pthread_join 的 undefined reference

转载 作者:太空狗 更新时间:2023-10-29 12:10:28 26 4
gpt4 key购买 nike

我正在尝试构建我的程序,但不断收到相同的错误消息:

undefined reference to pthread_create  
undefined reference to pthread_join

我已经包含 pthread.h 并且在我的 makefile 中使用 -pthread 进行编译。

int threadAmount = strtol(nrthr, NULL, 0);
threadAmount--;

if(threadAmount > 0){
pthread_t tids[threadAmount];

for(int i = 0;i < threadAmount; i++){
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_create(&tids[i],&attr,search,&t1);
}

for(int i = 0;i < threadAmount; i++){
pthread_join(tids[i],NULL);
}
}

这就是我调用 create 和 join 的地方。可能是什么问题?

用于构建的makefile:

CC=gcc
CFLAGS= -pthread -std=gnu11 -Wall -Wextra -Werror -Wmissing-declarations -Wmissing-prototypes -Werror-implicit-function-declaration -Wreturn-type -Wparentheses -Wunused -Wold-style-definition -Wundef -Wshadow -Wstrict-prototypes -Wswitch-default -Wunreachable-code

all: mfind

list.o: list.c list.h
$(CC) -c list.c $(CFLAGS)

mfind.o: mfind.c list.h
$(CC) -c mfind.c $(CFLAGS)

mfind: mfind.o list.o
$(CC) mfind.o list.o -o mfind

clean:
rm -f *.o mfind

mfind 是主程序,list.c 是实现的列表。

最佳答案

list.o: list.c list.h
$(CC) -c list.c $(CFLAGS)

mfind.o: mfind.c list.h
$(CC) -c mfind.c $(CFLAGS)

mfind: mfind.o list.o
$(CC) mfind.o list.o -o mfind

看起来您的某些食谱缺少 CFLAGS,其中包括选项 -pthread。我认为应该是:

list.o: list.c list.h
$(CC) $(CFLAGS) -c list.c

mfind.o: mfind.c list.h
$(CC) $(CFLAGS) -c mfind.c

mfind: mfind.o list.o
$(CC) $(CFLAGS) mfind.o list.o -o mfind

...

CFLAGS 到输出工件就可以了。事实上,当编译器驱动程序驱动链接时,您应该使用相同的CFLAGS(和CXXFLAGS)。您还应该始终使用编译器驱动程序,因为它负责将选项(如 -pthread-fopenmp-fsanitize=undefined 转换为链接器的正确选项和库。

如果感兴趣,这里是 GNUmake 使用的默认规则:Catalogue of Built-In Rules .请注意 *.c 文件的配方包括 CFLAGS:

Compiling C programs

n.o is made automatically from n.c with a recipe of the form $(CC) $(CPPFLAGS) $(CFLAGS) -c.

如果您使用 GNU Make 手册中的以下内容,那么您还应该将 -pthread 添加到 LDFLAGS。但我建议您遵循编译器人员告诉我们的内容,即通过编译器驱动程序驱动链接。

Linking a single object file

n is made automatically from n.o by running the linker (usually called ld) via the C compiler. The precise recipe used is $(CC) $(LDFLAGS) n.o $(LOADLIBES) $(LDLIBS).

关于c - 对 pthread_create 和 pthread_join 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46750464/

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