Semaphore erstellen
-
Hallo zusammen!
Ich habe ein Problem beim erstellen, eines Semaphore.
#include <sys/types.h> #include <stdio.h> #include <errno.h> #include <fcntl.h> #include <unistd.h> #include <sys/mman.h> #include <semaphore.h> #include <sys/stat.h> int main (void){ sem_t *mysemp; int oflag = O_CREAT; mode_t mode = 0644; const char semname[] = "/tmp/mysem"; unsigned int value = 1; mysemp = sem_open(semname, oflag, mode, value); if (mysemp == (void *)-1) { perror("sem_open() failed "); } else printf ("Semaphore erstellt"); }
Ich bekomme eine Fehlermeldung "undefined reference to sem_open", obwohl
#include <semaphore.h>
eingebunden ist.
Kann mir jemand einen Tip geben, wo der Hase im Pfeffer liegt?
Besten Dank!
-
Benutz mal den Parameter "-lrt" beim übersetzen mit gcc
-
shm_open ist in librt. sem_open in libpthread.
-
Danke lagalopex, damit geht es. Kannst du mir auch noch sagen, was dieser Parameter bedeutet? Ich will ja was lernen und wissen, warum es jetzt geht. Hast du eine Quelle wo ich das nachlesen kann?
Danke schon mal für eure Hilfe!
-
Also in der man-page von sem_open ist ein Verweis auf die man-page von sem_overview. Und dort steht:
Linking
Programs using the POSIX semaphores API must be compiled with cc -lrt to link against the real-time library, librt.Und wie auch daraus zu ersehen ist, heißt es einfach nur, dass das zu erstellende Programm die Bibliothek rt benutzen soll. Mit "ldd einprogram" kannst du dir alle Bibliotheken ausgeben lassen, die ein Programm benötigt.