Timespec:struct type错误c2011

使用Visual Studio 2015在C中执行Pthread程序时出现以下错误

错误C2011’timespec’:’struct’类型重新定义

以下是我的代码:

#include #include #include 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); } 

添加此编译器标志:

 -DHAVE_STRUCT_TIMESPEC 

在Visual Studio 2015中编译包含MariaDB 10头文件的程序时会出现同样的问题(使用10.1.14查看)。

解决方案是定义以下内容:

 STRUCT_TIMESPEC_HAS_TV_SEC STRUCT_TIMESPEC_HAS_TV_NSEC 

尽管这个问题已经得到了正确回答,但还有另一种方法可以解决这个问题。

首先,问题出现是因为pthreads-win32内部包含time.h ,它已经声明了timespec struct

为了避免这个错误,我们唯一应该做的就是:

 #define HAVE_STRUCT_TIMESPEC #include  

删除pthread.h中的所有’TIMESPEC’实例 (先备份。)

如果我理解正确,你可能已经下载了pthread并尝试将其安装到你的VS.

但是pthreads.h文件与其他头文件中已定义的TIMESPEC定义不能很好地配合。

因此,删除定义TIMESPEC的pthreads.h文件部分。