Timespec :struct type Error c2011

2019-01-19 05:38发布

While executing a Pthread program in C using Visual Studio 2015.I got the following error

Error C2011 'timespec': 'struct' type redefinition

The following is my 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);
}

4条回答
放荡不羁爱自由
2楼-- · 2019-01-19 06:03

Despite this question is already answered correctly, there is also another way to solve this problem.

First, problem occurs because pthreads-win32 internally includes time.h which already declares timespec struct.

To avoid this error the only thing we should do is this:

#define HAVE_STRUCT_TIMESPEC
#include <pthread.h>
查看更多
我想做一个坏孩纸
3楼-- · 2019-01-19 06:14

Delete all instances of 'TIMESPEC' in pthread.h (Make a backup first.)

If I understand it correctly, you probably downloaded pthreads and tried installing it into your VS.

But the pthreads.h file doesn't play nicely with the TIMESPEC defintions already defined in some other header file.

So, delete the portions of the pthreads.h file where TIMESPEC is defined.

查看更多
老娘就宠你
4楼-- · 2019-01-19 06:15

Add this compiler flag:

-DHAVE_STRUCT_TIMESPEC
查看更多
可以哭但决不认输i
5楼-- · 2019-01-19 06:27

The same problem happens when compiling programs in Visual Studio 2015 that include MariaDB 10 header files (saw it with 10.1.14).

The solution there is to define the following:

STRUCT_TIMESPEC_HAS_TV_SEC
STRUCT_TIMESPEC_HAS_TV_NSEC
查看更多
登录 后发表回答