Erreur de redéfinition de Timespec [dupliquer]
cette question a déjà une réponse ici:
- Timespec: erreur de type de structure c2011 4 réponses
lors de l'exécution d'un programme Pthread en C en utilisant Visual Studio 2015, j'ai eu l'erreur suivante:
Error C2011 'timespec': 'struct' type redefinition
ce qui suit est mon code:
#include<pthread.h>
#include<stdlib.h>
#include<stdio.h>
void *calculator(void *parameter);
int main(/*int *argc,char *argv[]*/)
{
pthread_t thread_obj;
pthread_attr_t thread_attr;
char *First_string = "abc"/*argv[1]*/;
pthread_attr_init(&thread_attr);
pthread_create(&thread_obj,&thread_attr,calculator,First_string);
}
void *calculator(void *parameter)
{
int x=atoi((char*)parameter);
printf("x=%d", x);
}
le fichier d'en-tête pthread.h
contient le code suivant relié à timespec:
#if !defined(HAVE_STRUCT_TIMESPEC)
#define HAVE_STRUCT_TIMESPEC
#if !defined(_TIMESPEC_DEFINED)
#define _TIMESPEC_DEFINED
struct timespec {
time_t tv_sec;
long tv_nsec;
};
#endif /* _TIMESPEC_DEFINED */
#endif /* HAVE_STRUCT_TIMESPEC */
aucun autre fichier d'en-tête que j'utilise n'utilise la structure timespec
, donc il n'y a aucune chance de redéfinir. Il n'y a aucune chance d'un fichier d'en-tête corrompu parce qu'il a été téléchargé à partir du site Web de pthread opensource.
1 réponses
pthreads-win32 (que je suppose que vous utilisez) may internally include time.h
( time.h
est également couramment inclus par d'autres bibliothèques/en - têtes) - et time.h
déclare déjà timespec
(également, il le fait d'une manière compatible avec pthreads)-pourtant, le pthreads-win32 pthread.h
n'a pas les gardes inclure valides pour ce cas (honte à eux!). pthreads essaie de le déclarer parce qu'il en a besoin en interne, mais puisqu'il est possible qu'il il n'aura pas besoin de la totalité du time.h
, il essaie de déclarer seulement le timespec
si possible. Cependant, vous pouvez simplement ajouter
#define HAVE_STRUCT_TIMESPEC
avant #include <pthread.h>
-qui indiquera à l'en-tête pthreads-win32 que vous avez déjà un timespec
, et laissera votre code compiler correctement.
alternativement, si vous utilisez pthreads intensivement, vous pouvez vouloir éditer le fichier d'en - tête lui-même-il suffit d'ajouter que #define HAVE_STRUCT_TIMESPEC
à lui quelque part près de la tu commences, et tu es prêt à partir.
autre lecture: http://mingw-users.1079350.n2.nabble.com/mingw-error-redefinition-of-struct-timespec-td7583722.html