在C中创建线程

13 浏览
0 Comments

在C中创建线程

这个问题已经有答案了:

Linux中的pthread_create未定义引用

我正在尝试使用gcc -Wall -std=c99 hilo.c - ./a.out hilo.c运行这个C程序,但是我得到了这个错误信息:

hilo.c: In function ‘func’:
hilo.c:6:3: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘pthread_t’ [-Wformat]
hilo.c: In function ‘main’:
hilo.c:14:3: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
/usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(void)’
hilo.c:15:3: warning: passing argument 3 of ‘pthread_create’ from incompatible pointer type [enabled by default]
/usr/include/pthread.h:225:12: note: expected ‘void * (*)(void *)’ but argument is of type ‘void (*)(void)’
hilo.c:24:3: warning: statement with no effect [-Wunused-value]
/tmp/cchmI5wr.o: In function `main':
hilo.c:(.text+0x52): undefined reference to `pthread_create'
hilo.c:(.text+0x77): undefined reference to `pthread_create'
hilo.c:(.text+0x97): undefined reference to `pthread_join'
hilo.c:(.text+0xab): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

不知道代码有什么问题,所以如果有人能帮忙我会很感激。

这是代码:

#include 
#include 
void func(void){
         printf("thread %d\n", pthread_self());
         pthread_exit(0);
}
   int main(void){
        pthread_t hilo1, hilo2;
        pthread_create(&hilo1,NULL, func, NULL);
        pthread_create(&hilo2,NULL, func, NULL);
        printf("the main thread continues with its execution\n");
        pthread_join(hilo1,NULL);
        pthread_join(hilo2, NULL);
        printf("the main thread finished");
        scanf;
  return(0);
}

admin 更改状态以发布 2023年5月21日
0
0 Comments

你没有链接 pthread 库,请使用以下命令进行编译:

gcc -Wall -std=c99 hilo.c -lpthread

0
0 Comments

你应该使用 -pthread 编译和链接。

gcc -Wall -std=c99 hilo.c -pthread

仅使用 -lpthread 是不够的。 -pthread 标志将改变一些 libc 函数的工作方式,以便在多线程环境中正确地工作。

0