Pages : 1
#1 Le 30/05/2007, à 20:52
- damiens
compilation et thread
voici un code que je testais et qui est tout simple :
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
void *creationPartie (void *ptr){
int i = 5;
printf("%d",i);
}
int main(int argc, char** argv){
pthread_t creaPartie;
//creation des threads
pthread_create(&creaPartie,NULL,(void*)&creationPartie,(void*)"creation partie");
//les pthread_join
pthread_join(creaPartie,NULL);
}
lorsque je compile avec gcc j'obtiens ces erreurs
In file included from main.c:7:
/usr/include/pthread.h:285: erreur: conflicting types for ‘pthread_t’
/usr/include/bits/pthreadtypes.h:36: erreur: previous declaration of ‘pthread_t’ was here
/usr/include/pthread.h:286: erreur: conflicting types for ‘pthread_attr_t’
/usr/include/bits/pthreadtypes.h:43: erreur: previous declaration of ‘pthread_attr_t’ was here
/usr/include/pthread.h:287: erreur: conflicting types for ‘pthread_key_t’
/usr/include/bits/pthreadtypes.h:109: erreur: previous declaration of ‘pthread_key_t’ was here
/usr/include/pthread.h:289: erreur: conflicting types for ‘pthread_mutexattr_t’
/usr/include/bits/pthreadtypes.h:79: erreur: previous declaration of ‘pthread_mutexattr_t’ was here
/usr/include/pthread.h:290: erreur: conflicting types for ‘pthread_mutex_t’
/usr/include/bits/pthreadtypes.h:73: erreur: previous declaration of ‘pthread_mutex_t’ was here
/usr/include/pthread.h:291: erreur: conflicting types for ‘pthread_condattr_t’
/usr/include/bits/pthreadtypes.h:105: erreur: previous declaration of ‘pthread_condattr_t’ was here
/usr/include/pthread.h:292: erreur: conflicting types for ‘pthread_cond_t’
/usr/include/bits/pthreadtypes.h:99: erreur: previous declaration of ‘pthread_cond_t’ was here
/usr/include/pthread.h:293: erreur: conflicting types for ‘pthread_rwlockattr_t’
/usr/include/bits/pthreadtypes.h:142: erreur: previous declaration of ‘pthread_rwlockattr_t’ was here
/usr/include/pthread.h:294: erreur: conflicting types for ‘pthread_rwlock_t’
/usr/include/bits/pthreadtypes.h:136: erreur: previous declaration of ‘pthread_rwlock_t’ was here
j'ai installe libpthread-dev je ne sais pas si cela a un quelcquonque rapport ...
#2 Le 30/05/2007, à 20:59
- Link31
Re : compilation et thread
Un des includes est apparemment en trop, et ils ne sont pas bien protégés contre les inclusions multiples. Enlève sys/types.h, il définit les mêmes types que pthread.h.
Hors ligne
#3 Le 30/05/2007, à 21:14
- Damiens
Re : compilation et thread
voici les seuls include que j'ai laisse et ca ne fonctionne toujours pas :
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#4 Le 30/05/2007, à 21:19
- damiens
Re : compilation et thread
si j'ai bien compris voici les 2 fichiers .h qu'il inclu :
-/usr/include/pthread.h:285
-/usr/include/bits/pthreadtypes.h
ma question est comment l'empecher d'incure le deuxieme alors que je ne lui ai rien demande ???
#5 Le 30/05/2007, à 21:25
- Link31
Re : compilation et thread
ma question est comment l'empecher d'incure le deuxieme alors que je ne lui ai rien demande ???
Tu ne peux pas. pthread.h inclut pthreadtypes.h et c'est normal. Mais tu avais également inclus sys/types.h, qui inclut lui aussi pthreadtypes.h, d'où les erreurs lors de la compilation. Maintenant ça devrait fonctionner.
Bien entendu, tu utilises l'option -lpthread dans ta ligne de commande de compilation, n'est-ce pas ?
Hors ligne
#6 Le 30/05/2007, à 21:37
- damiens
Re : compilation et thread
j'ai tout essaye. avec -lpthread, sans, avec l'option -c, sans. Ca ne fonctionne pas !
#7 Le 30/05/2007, à 21:52
- damiens
Re : compilation et thread
Voila ce que j'ai trouve dans le code de pthread.h
/*
* Include essential vendor headers
*/
#include <sys/types.h> /* for ssize_t */
#include <sys/time.h> /* for struct timeval */
#include <sys/socket.h> /* for sockaddr */
#include <sys/signal.h> /* for sigset_t */
#include <time.h> /* for struct timespec */
#include <unistd.h> /* for off_t */
#include <sys/select.h>
pthread.h inclu le sys/types ... me voila bien embete ! Ce que je ne comprends pas c'est que je pensais que ce code si prevenait les inclusions multiples (toujours dans pthread.h)...
#ifndef _PTH_PTHREAD_H_
#define _PTH_PTHREAD_H_
/*
**
** BOOTSTRAPPING
**
*/
/*
* Prevent system includes from implicitly including
* possibly existing vendor Pthread headers
*/
#define PTHREAD
#define PTHREAD_H
#define _PTHREAD_T
#define _PTHREAD_H
#define _PTHREAD_H_
#define PTHREAD_INCLUDED
#define _PTHREAD_INCLUDED
#define SYS_PTHREAD_H
#define _SYS_PTHREAD_H
#define _SYS_PTHREAD_H_
#define SYS_PTHREAD_INCLUDED
#define _SYS_PTHREAD_INCLUDED
#define BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H_
#define _BITS_SIGTHREAD_H
et on voit que _BITS_PTHREADTYPES_H y est présent. et dans bits/pthread.h on a ca :
#ifndef _BITS_PTHREADTYPES_H
#define _BITS_PTHREADTYPES_H 1
je dois avouer que je ne sais pas quoi en penser du fait que je ne suis pas un pro des macros ...
#8 Le 30/05/2007, à 23:16
- Link31
Re : compilation et thread
et on voit que _BITS_PTHREADTYPES_H y est présent. et dans bits/pthread.h on a ca :
#ifndef _BITS_PTHREADTYPES_H #define _BITS_PTHREADTYPES_H 1
C'est bon. Tu n'as pas à inclure sys/types.h en même temps que pthread.h, puisqu'ils sont en conflit. Mais pthread.h s'occupe de ça très bien tout seul, en définissant _BITS_PTHREADTYPES_H, ce qui prévient les typedefs multiples...
Bref, avec les bons includes, ton code fonctionne.
link31@linux ~$ cat testthread2.c
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
void *creationPartie (void *ptr){
int i = 5;
printf("%d",i);
}
int main(int argc, char** argv){
pthread_t creaPartie;
//creation des threads
pthread_create(&creaPartie,NULL,(void*)&creationPartie,(void*)"creation partie");
//les pthread_join
pthread_join(creaPartie,NULL);
}
link31@linux ~$ gcc testhread2.c -o testthread2 -lpthread
link31@linux ~$ ./testthread2
5
Et si tu n'arrives toujours pas à le compiler après ça, si tu m'indiquais les messages d'erreur ?
Hors ligne
#9 Le 31/05/2007, à 11:51
- damiens
Re : compilation et thread
J'ai toujours la meme erreur.
Alors, j'ai desinstalle libpthread-dev (les 2paquets ...) que j'avais du installe pour que gcc prenne l'option -lpthread. Maintenant j'arrive à avoir des fichiers .o grace a la command gcc -c essai.c -o essai. J'arrive meme a avoir un executable parce que gcc prend toujours l'option -lpthread (ce qui ne fonctionnait pas avant que j'installe libpthread-dev) ...
C'est ce qui s'appelle un mystere de l'inforamtique je suppose ...
Donc voila, ca fonctionne mais je ne sais pas pourquoi !
Pages : 1