首页 > 代码库 > 线程异常:undefined reference to 'pthread_create' 处理

线程异常:undefined reference to 'pthread_create' 处理

源码:

#include <stdio.h>
#include <pthread.h>
#include <sched.h>


void *producter_f (void *arg);
void *consumer_f (void *arg);




int buffer_has_item=0;
pthread_mutex_t mutex;


int running =1 ;


int main (void)
{
pthread_t consumer_t;
pthread_t producter_t;

pthread_mutex_init (&mutex,NULL);

pthread_create(&producter_t, NULL,(void*)producter_f, NULL );
pthread_create(&consumer_t, NULL, (void *)consumer_f, NULL);
usleep(1);
running =0;
pthread_join(consumer_t,NULL);
pthread_join(producter_t,NULL);
pthread_mutex_destroy(&mutex);

return 0;
}


void *producter_f (void *arg)
{
while(running)
{
pthread_mutex_lock (&mutex);
buffer_has_item++;
printf("生产,总数量:%d\n",buffer_has_item);
pthread_mutex_unlock(&mutex);
}
}


void *consumer_f(void *arg)
{
while(running)
{
pthread_mutex_lock(&mutex);
buffer_has_item--;
printf("消费,总数量:%d\n",buffer_has_item);
pthread_mutex_unlock(&mutex);
}
}



错误场景:

[root@luozhonghua 04]# gcc -o mutex ex04-5-mutex.c

/tmp/ccZuFiqr.o: In function `main‘:
ex04-5-mutex.c:(.text+0x3d): undefined reference to `pthread_create‘
ex04-5-mutex.c:(.text+0x61): undefined reference to `pthread_create‘
ex04-5-mutex.c:(.text+0x8b): undefined reference to `pthread_join‘
ex04-5-mutex.c:(.text+0x9f): undefined reference to `pthread_join‘

collect2: ld returned 1 exit status


分析:pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 libpthread.a


处理:

在编译中加 -lpthread 参数
[root@luozhonghua 04]# gcc -lpthread -o mutex ex04-5-mutex.c