undefined reference to pthread_mutexattr_init
-
Hallo zusammen,
ich programmiere gerade ein bischen mit pthread und kriege jetzt komischerweise linkerprobleme.
Also ich habe einen sourcefile race.c, dort habe ich ganz oben
#include <pthread.h> gemacht und dann in der main z.B. folgende Aufrufe drin:pthread_mutexattr_init(&attr); pthread_mutexattr_setpshared(&attr, PTHREAD_PROCESS_SHARED); pthread_mutex_init(mutex, &attr); pthread_mutexattr_destroy(&attr);
Ich kompiliere mit
gcc -Wall -lpthread race.c
Das gibt dann folgende Ausgaben:
$ gcc -Wall -lpthread race.c /tmp/ccKjSfVZ.o: In function `main': race.c:(.text+0x73): undefined reference to `pthread_mutexattr_init' race.c:(.text+0x84): undefined reference to `pthread_mutexattr_setpshared' race.c:(.text+0xa3): undefined reference to `pthread_mutexattr_destroy' collect2: ld returned 1 exit status
Hat jemand eine Idee, woran das liegt und wie ich das beheben kann? -lpthread ist ja schon drin.
Edit:
Jetzt habe ich das ganze auf sem_t umgestellt und bekomme folgende Ausgabe:$ gcc -Wall -lpthread -lrt race.c /tmp/cchk7Qi1.o: In function `main': race.c:(.text+0x6e): undefined reference to `sem_init' race.c:(.text+0xcc): undefined reference to `sem_wait' race.c:(.text+0xf8): undefined reference to `sem_post' race.c:(.text+0x106): undefined reference to `sem_post' race.c:(.text+0x16f): undefined reference to `sem_destroy' collect2: ld returned 1 exit status
Was ist da los?
-
die reihenfolge ist AFAIK wichtig. probiers mal wenn du -lpthread nach der angabe deines source files angibst
-
Danke! Genau daran lags! Ich dachte immer, dass die reihenfolge egal ist...
Wie ist denn die allgemeine Regel dabei? -Wall habe ich z.B. auch vor die sourcefiles geschrieben und ich glaube das hat geklappt.
-
Die Regel ist, dass die Abhängigkeit erst nach dem abhängigen Modul angegeben wird.