Possible Duplicate:
undefined reference to pthread_create in linux (c programming)
I am trying to implement Thread chain in Ubuntu in C. When I compile the following code, I get the errors of Undefined reference to these thread library function even though I have added the header file.I am also getting segmentation fault error. Why is that? I am not accessing some uninitialized memory anywhere in program. Here is the code:
#include <stdio.h>
#include<stdlib.h>
#include <pthread.h>
void* CreateChain(int*);
int main()
{
int num;
pthread_t tid;
scanf("Enter the number of threads to create\n %d",&num);
pthread_create(&tid,NULL,CreateChain,&num);
pthread_join(tid,NULL);
printf("Thread No. %d is terminated\n",num);
return 0;
}
void* CreateChain(int* num )
{
pthread_t tid;
if(num>0)
{
pthread(&tid,NULL,CreateChain,num);
pthread_join(tid,NULL);
printf("Thread No. %d is terminated\n",*num);
}
else
return NULL;
return NULL;
}
I am getting following warnings and the Scanf prompt is not appearing for some reason.

Regards
The pthread.h header file provides a forward declaration of pthread functions. This tells the compiler than these functions exist and have a certain signature. It doesn’t however tell the linker anything about where to find these functions at runtime.
To allow the linker to resolve these calls (decide where to jump to inside your code or in a different shared object), you need to link against the appropriate (pthread) library by adding
to your build command line.
[Note that it is also possible to use
-lpthread. This previous question expains why-pthreadis preferable.]There are various other issues with the code that will be worthy of attention
scanfline should be split intoprintf("Enter number of threads\n");scanf("%d", &num);to get the user prompt displayedCreateChainis wrong – it should take avoid*argument instead. You can always do something likeint num = *(int*)arg;inside the function to retrieve the number of threads.CreateChainlooks wrong. You currently compare a pointer against 0 – I presume you mean to compare the number of threads instead? Also, if you don’t decrement the number of threads to create somewhere, you’ll end up with code that creates threads forever (or until you run out of handles depending on how the different threads get scheduled).