c语言 - 编译时对所有'sem'和'pthread'函数的未定义引用



我正在使用 gcc 编译这个 c 程序,该程序仅依赖于 2 个创建的线程,一个用于递增计数器,第二个读取计数器并从计数器中减去一个随机 (0-9( 值,然后显示计数器的值,使用信号量访问它。仍然在编译时,我面临很多对 sem_init/sem_wait/sem_post/pthread_create/.. 的未定义引用。等等'我不知道为什么,尽管我在我的程序中将它们关联为标头。

我正在使用'gcc -o prog prog.c'来编译我的程序。

#include<semaphore.h>
#include<pthread.h>
#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int counter=0;
int run=1;
sem_t mutex;
void * increm();
void * decrem();

void main()
{       sem_t mutex;
    sem_init(&mutex,0,1);
    pthread_t t1,t2;
    pthread_create(&t1,NULL,increm,NULL);
    pthread_create(&t2,NULL,decrem,NULL);
pthread_join(t1,NULL);
pthread_join(t2,NULL);
sem_destroy(&mutex);
}
void * increm()
{  while(run)
    {sem_wait(&mutex);
            counter++;
            sem_post(&mutex);
    }
    pthread_exit(NULL);
}
 void * decrem()
{ int i=25;
    while(i>0)
    {sem_wait(&mutex);
            counter-=(rand()%10);
           printf("Counter value : %d n",counter);
            i--;
            sem_post(&mutex);
    }
    run=0;
    pthread_exit(NULL);
 }

[...]在编译时,我面临很多'未定义的引用 sem_init/sem_wait/sem_post/pthread_create/..等等'我不知道为什么 尽管我在程序中将它们关联为标头。

我正在使用'gcc -o prog prog.c'来编译我的程序。

使用

GCC,您应该在编译和链接使用 pthreads 函数的程序时传递 -pthread 选项以gcc

gcc -pthread -o prog prog.c

至少,这将导致所需的库包含在链接中,但原则上,它可能会对某些版本的 GCC 和某些平台上的代码生成产生影响。

另请参阅编译时 -pthread 标志的意义、编译时 -pthread 和 -lpthread 之间的区别等等。

最新更新