Erreur de redéfinition de Timespec [dupliquer]

cette question a déjà une réponse ici:

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.

7
demandé sur vaxquis 2015-11-06 03:39:19

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

29
répondu vaxquis 2016-05-06 12:22:53