2010-11-30 29 views
2
#include <semaphore.h> 


sem_t mutex; 


int main (int argc, char * argv[]) 
{ 



sem_init (&mutex,0,1); 

} 

Je reçois:Pourquoi ce code sémaphore est-il en panne?

/tmp/ccAMFxDX.o: In function `main': 
programaservidor.c:(.text+0x86): undefined reference to `sem_init' 
collect2: ld returned 1 exit status 

Répondre

5

par la page man sem_init()

-lrt ou -pthread.

Comme dans gcc your_code.c -lpthread -o your_code

+0

Je suis novice en la matière. Pouvez-vous décrire de manière un peu plus détaillée ce que vous voulez dire en liant avec -lrt ou -pthread? – Unome

+1

@Un certain sûr, voir [ce lien] (http://en.wikipedia.org/wiki/Linker_%28computing%29) pour avoir une meilleure compréhension de ce qu'est le lien. Chaque fois que vous voyez une option '-l ' passée à une commande gcc, c'est une directive indiquant au lieur qu'il doit regarder une bibliothèque appelée pour trouver le code objet nécessaire pour créer l'exécutable. Dans le cas de l'OP, le code objet de la fonction appelée 'sem_init' se trouve dans la bibliothèque' pthread'. – SiegeX

+0

Génial, le code qui m'a été donné a été enveloppé avec un fichier make, donc j'ai dû ajouter le -pthread pour qu'il s'exécute. Merci! – Unome

1

Comme indiqué dans la page de manuel, vous devez créer un lien soit avec -lrt ou -pthread.