编译时对所有 'sem' 和 'pthread' 函数的未定义引用
Undefined reference to all 'sem' and 'pthread' functions upon compilation
我正在使用 gcc 编译这个仅依赖于 2 个创建的线程的 c 程序,一个用于增加计数器,第二个读取计数器并从计数器中减去一个随机 (0-9) 值,并且然后显示计数器的值,使用信号量访问它。仍然在编译时我面临很多'未定义的引用 sem_init/sem_wait/sem_post/pthread_create/..etc' 我不知道为什么尽管我在我的程序中将它们关联 headers。
我正在使用“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);
}
[...] upon compilation I'm facing lots of ' Undefined reference to
sem_init/sem_wait/sem_post/pthread_create/..etc' I don't know why
although I associated them headers in my program.
I'm using 'gcc -o prog prog.c'to compile my program.
使用 GCC,您应该在编译时以及在 link 使用 pthreads 函数的程序时将 -pthread
选项传递给 gcc
:
gcc -pthread -o prog prog.c
至少,这会导致所需的库包含在 link 中,但原则上,它可能会影响某些版本的 GCC 和某些版本的代码生成平台。
另请参阅 Significance of -pthread flag when compiling, Difference between -pthread and -lpthread while compiling,以及许多其他内容。
我正在使用 gcc 编译这个仅依赖于 2 个创建的线程的 c 程序,一个用于增加计数器,第二个读取计数器并从计数器中减去一个随机 (0-9) 值,并且然后显示计数器的值,使用信号量访问它。仍然在编译时我面临很多'未定义的引用 sem_init/sem_wait/sem_post/pthread_create/..etc' 我不知道为什么尽管我在我的程序中将它们关联 headers。
我正在使用“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);
}
[...] upon compilation I'm facing lots of ' Undefined reference to sem_init/sem_wait/sem_post/pthread_create/..etc' I don't know why although I associated them headers in my program.
I'm using 'gcc -o prog prog.c'to compile my program.
使用 GCC,您应该在编译时以及在 link 使用 pthreads 函数的程序时将 -pthread
选项传递给 gcc
:
gcc -pthread -o prog prog.c
至少,这会导致所需的库包含在 link 中,但原则上,它可能会影响某些版本的 GCC 和某些版本的代码生成平台。
另请参阅 Significance of -pthread flag when compiling, Difference between -pthread and -lpthread while compiling,以及许多其他内容。