2017-09-23 5 views
-1

Je n'arrive pas à compiler mon code, qui utilise un mutex (donc utilise des verrous et conditions pthread). J'ai essayé d'inclure le fichier d'en-tête, en compilant avec -pthread ou -lpthread, mais je reçois toujours une erreur. L'aide serait très appréciée.Code C - Pthread ne compile pas

Ceci est la sortie d'erreur:

déclaration implicite de la fonction « pthread_mutex_lock » [-Wimplicit-fonction-déclaration] pthread_mutex_lock (& serrure); // verrouillé ^ /tmp/cchVS47i.o: En fonction getMessage1': hw3.c:(.text+0x22): undefined reference to pthread_mutex_lock. hw3.c :(texte + 0x50): undefined reference to Pthread_mutex_lock' /tmp/cchVS47i.o: In function getMessage2' : hw3.c :(texte + 0x13e):. Non définie référence à `pthread_mutex_lock » collect2: erreur: ld retourné 1 état de sortie

Et voici les sections pertinentes de mon code (modifié pour plus de clarté):

#define _GNU_SOURCE 
#include<stdio.h> 
#include<string.h> 
#include<unistd.h> 
#include<pthread.h> 
#include<stdlib.h> 

char message[1001]; 
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; 
pthread_cond_t condition = PTHREAD_COND_INITIALIZER; 

void *getMessage1() 
{ 
Pthread_mutex_lock(&lock); //locked 

.... 
} 

int main(void) 
{ 
pthread_t id1; 
pthread_t id2; 

pthread_create((&id1), NULL, getMessage1, NULL); 
pthread_create((&id2), NULL, getMessage2, NULL); 

... 

return 0; 
} 
+0

avez-vous donné la bibliothèque comme argument –

+0

que voulez-vous dire par argument? J'ai essayé de compiler avec des variations de gcc -Wall -Wextra -pedantic -pthread hw3.c -lpthread – Selena

+0

Je pensais que vous n'avez pas inclus la bibliothèque –

Répondre

1

Il est le P-vous de capital

Pthread_mutex_lock(&lock); //locked

au début de la fonction getmessage1().

Votre compilateur se plaint qu'il n'a pas vu de déclaration pour cette fonction dans la phase de compilation. Il se plaint également de cela dans la phase de liaison. Vous incluez toutes les bonnes bibliothèques car il ne se plaint pas des autres fonctions qui sont correctement tapées.

Le nom correct de la fonction est pthread_mutex_lock().

Dans l'original k & r C il est possible d'utiliser des fonctions sans déclaration, bien que les compilateurs les avertissent. Dans les versions plus modernes de C (99), cela a été abandonné.

+0

merci, mais je reçois toujours une erreur. quand je supprime le capital p et compile avec gcc -Wall -Wextra -pedantic -pthread hw3.c -lpthread Je reçois: avertissement: déclaration implicite de la fonction 'thread_mutex_lock' [-Wimplicit-function-declaration] thread_mutex_lock (&lock); // verrouillé /tmp/ccGZwoMv.o: Dans la fonction 'getMessage2 ': (.text + 0x134): référence non définie à' thread_mutex_lock' collect2: erreur: ld a renvoyé 1 état de sortie – Selena

+0

Changez-le en un petit p, ne pas Le nom correct de la fonction est pthread_mutex_lock() –

+0

oui, je voulais dire que je l'ai changé en un petit p – Selena