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.


Anmelden zum Antworten