18

I have recently installed XUbuntu 11.10 64bit, but I am having problem compiling the most simple pthread example.

Here is the code pthread_simple.c:

#include <stdio.h>
#include <pthread.h> 
main()  {
  pthread_t f2_thread, f1_thread; 
  void *f2(), *f1();
  int i1,i2;
  i1 = 1;
  i2 = 2;
  pthread_create(&f1_thread,NULL,f1,&i1);
  pthread_create(&f2_thread,NULL,f2,&i2);
  pthread_join(f1_thread,NULL);
  pthread_join(f2_thread,NULL);
}
void *f1(int *x){
  int i;
  i = *x;
  sleep(1);
  printf("f1: %d",i);
  pthread_exit(0); 
}
void *f2(int *x){
  int i;
  i = *x;
  sleep(1);
  printf("f2: %d",i);
  pthread_exit(0); 
}

And here is the compile command

gcc -lpthread pthread_simple.c

The results:

lptang@tlp-linux:~/test/test-pthread$ gcc -lpthread pthread_simple.c 
/tmp/ccmV0LdM.o: In function `main':
pthread_simple.c:(.text+0x2c): undefined reference to `pthread_create'
pthread_simple.c:(.text+0x46): undefined reference to `pthread_create'
pthread_simple.c:(.text+0x57): undefined reference to `pthread_join'
pthread_simple.c:(.text+0x68): undefined reference to `pthread_join'
collect2: ld returned 1 exit status

Does anyone know what's causing the problem?

4
  • Is it stackexchange's fault that you have empty includes in the first two lines? There should be an #include <pthread.h>
    – Frg
    Mar 4, 2012 at 13:24
  • Yes, I used the pre environment. It should now display correctly.
    – chtlp
    Mar 4, 2012 at 13:27
  • 3
    Tried gcc -pthread...?
    – sr_
    Mar 4, 2012 at 13:42
  • BTW, please compile with -Wall, you're missing headers. (And sr_ is correct.)
    – Mat
    Mar 4, 2012 at 13:43

3 Answers 3

31

In the latest versions of gcc compiler require that libraries follow the object or source files.

So to compile this it should be:

gcc pthread_sample.c -lpthread

Normally though pthread code is compiled this way:

gcc -pthread pthread_sample.c
3
  • 1
    @Karlson Can you please explain why just including the pthread.h file is not enough for gcc to resolve the references? Dec 31, 2016 at 21:58
  • 3
    @iamcreasy Because declaration is not the same as definition. The program needs to know where the code executing a particular function is.
    – Karlson
    Dec 31, 2016 at 23:24
  • Sorry, could you please tell us what's the difference between -pthread and -lpthread. Some tutorial add -l some don't, why? Jun 2, 2021 at 13:49
1
gcc -o exectable_namme pthread_sample.c -lpthread
1
  • 4
    It would be helpful to edit your answer to explain why this is different from the already accepted answer. Nov 20, 2015 at 11:17
0

compile code using following command

gcc filename.c -lpthread -lrt
1
  • 3
    Hi! It would be helpful if you could edit your answer to explain why it works, and to highlight why you think it adds something the already accepted answer doesn't cover.
    – dhag
    Apr 8, 2015 at 4:28

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .