线程编译问题(undefined reference to `pthread_create')

来源:互联网 发布:如何用源码建站 编辑:程序博客网 时间:2024/06/03 16:32
#include <stdio.h>#include <pthread.h>#include <stdlib.h>voidprintids(const char *s){        pid_t pid;        pthread_t tid;        pid = getpid();        tid = pthread_self();        printf("%s pid = [%u] tid = [%u] [0x%x]\n",                s, (unsigned int)pid, (unsigned int)tid, (unsigned int)tid);}void *thr_fn(void *arg){        printids("new thread:");        return ((void *)0);}intmain(){        pthread_t ntid;        int err;        err = pthread_create(&ntid, NULL, thr_fn, NULL);        if(err != 0)                printf("不能创建线程[%s]\n",strerror(err));        printids("main thread:");        sleep(3);        exit(0);}


[root@localhost pthread]# gcc test.c -o test

/tmp/ccq2Mbxs.o: In function `main':
test.c:(.text+0x89): undefined reference to `pthread_create'
collect2: ld 返回 1
[root@localhost pthread]#
问题原因:
   pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a,所以在使用pthread_create()创建线程,以及调用 pthread_atfork()函数建立fork处理程序时,需要链接该库。

问题解决:
    在编译中要加 -lpthread参数
    gcc test.c -o test -lpthread