gcc can't link to pthread?
134,755
Solution 1
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
Solution 2
gcc -o exectable_namme pthread_sample.c -lpthread
Related videos on Youtube
Author by
chtlp
Updated on September 18, 2022Comments
-
chtlp over 1 year
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?
-
Frg about 12 yearsIs it stackexchange's fault that you have empty includes in the first two lines? There should be an
#include <pthread.h>
-
chtlp about 12 yearsYes, I used the pre environment. It should now display correctly.
-
sr_ about 12 years
-
Mat about 12 yearsBTW, please compile with
-Wall
, you're missing headers. (And sr_ is correct.)
-
-
dhag about 9 yearsHi! 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.
-
roaima over 8 yearsIt would be helpful to edit your answer to explain why this is different from the already accepted answer.
-
Quazi Irfan over 7 years@Karlson Can you please explain why just including the
pthread.h
file is not enough for gcc to resolve the references? -
Karlson over 7 years@iamcreasy Because declaration is not the same as definition. The program needs to know where the code executing a particular function is.
-
Paris Qian Sen almost 3 yearsSorry, could you please tell us what's the difference between
-pthread
and-lpthread
. Some tutorial add-l
some don't, why?