pthread for win32的发行版本中只提供了动态库,今天在Visual Studio 2015下编译pthread for win32(2.9.1),想编译一个静态库,就报一个struct timespec重定义的错误,如下:

cl /I. /DHAVE_PTW32_CONFIG_H /O2 /Ob2 /W3 /MD /nologo /DPTW32_BUILD_INLI
NED /DPTW32_STATIC_LIB /D__CLEANUP_C -c pthread.c
pthread.c
d:\tmp\pthreads-w32-2-9-1-release\pthreads.2\pthread.h(320): error C2011: “timespec”:“struct”类型重定义
C:\Program Files (x86)\Windows Kits\10\include\10.0.10240.0\ucrt\time.h(39): note: 参见“timespec”的声明
d:\tmp\pthreads-w32-2-9-1-release\pthreads.2\pthread_mutex_consistent.c: warning     C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\x86_amd64\cl.EXE"”: 返回代码“0x2” Stop.
NMAKE : fatal error U1077: “"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\BIN\nmake.exe"”: 返回代码“0x2”Stop.

在Visual Studio 2015下只是#include <pthread.h>,编译也会报同样的错。

原因也很简单pthread for win32的最新版本是2012年出的。那时还没有Visual Studio 2015,Visual Studio 2015之前的版本中time.h中没有timespec结构定义,所以pthread.h中定义了struct timespec
到了Visual Studio 2015,在time.h中增加了timespec结构定义,于是就出错了。

解决方案1

修改pthread.h,在line 320之前加上宏定义根据MSVC版本号,判断是否要定义struct timespec
如下:

// 在line 320前增加下面三行,根据_MSC_VER 和_CRT_NO_TIME_T判断timespec是否定义
#if defined(_MSC_VER) && _MSC_VER >= 1900 && !defined(_CRT_NO_TIME_T)
#define _TIMESPEC_DEFINED
#endif
// line 320
#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 */

如果你想自己在VS2015下重新编译pthread for win32,那么只能用这个办法。

解决方案2

如果你只是在自己的项目中引用pthread.h,并不需要重新编译pthread for win32,
那么没必要修改pthread.h,在自己的项目中#include <pthread.h>之前加上宏定义HAVE_STRUCT_TIMESPEC_TIMESPEC_DEFINED

#if defined(_MSC_VER) && _MSC_VER >= 1900 && !defined(_CRT_NO_TIME_T)
#define _TIMESPEC_DEFINED
#endif
#include <pthread.h>

这个方法的好处就是不需要修改pthread for win32的代码,在己方代码中解决问题。代码管理比较方便。

在Visual Studio 2015下使用pthread win32编译报错相关推荐

  1. Visual Studio 2013 突然不高亮,编译报错

    同事的电脑,估计是windows更新失败的原因,C盘容量减小到不到1G,VS的高亮也坏了,重启后硬盘容量增加了但是仍然不高亮. 解决办法记录一下: 重置下. 开始菜单 -->所有程序--> ...

  2. Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...)

    Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...) 目录 Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...) 一.Android s ...

  3. Microsoft visual Studio 2015 下的俄罗斯方块源程序以及修改过程

    项目名称:俄罗斯方块 项目语言:C++ 项目软件: Microsoft visual Studio 2015 错误1 错误提要:错误使用标识符 错误定位: clrscr() 错误提示: 未定义标识符& ...

  4. ubuntu下SFML小游戏编译报错

    SFML CMakeLists SFML库的安装 编译报错 SFML库的安装 sudo apt-get sudo apt-get install libsfml-dev ubuntu会将库文件安装到/ ...

  5. qt在visual studio 2015下的使用

    创建工程: 打开visual studio,按上一篇文章的方式创建新工程QtGuiApplication1,默认我们可以看到里面会出现QtGuiApplication1这个类是继承于QMainWind ...

  6. 关于Ubuntu18版本下新安装Qtcreator编译报错:cannot run compiler clang++ output的解决办法

    第三次入坑 前两次本以为记住了,结果第三次再次在Linux下安装qtcreator依然捣鼓搞了半天,才决定将这些步骤记下来,<\笑哭> 1.在你安装好qtcreator之后,新建有一个qt ...

  7. QT vs下x64编译变win32编译报错:C:\Users\ycy\AppData\Local\QtMsBuild\qtrcc.targets(69,5): error MSB3073:

  8. 关于arm-none-linux-gnueabi-4.4.3编译环境下,lib1funs.S编译报错的处理

    原始报错信息: Krj@VM:~/soc_workspace/1stQuarter_BarBoard/15_NandFlash/NandFlash_codeTest$ make cleanDepend ...

  9. 在Visual Studio 2015中使用Grunt、Bowe

    基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...

最新文章

  1. hdu 5265(二分+枚举)
  2. [视频]怎样提升asp.net mvc 软件的性能 - 微软免费视频Improving ASP.NET MVC Application Performance...
  3. socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
  4. 同步降压DC-DC转换IC——XC9264
  5. 给python小白的几个小练习(附答案详解哦)
  6. mfc做数独游戏_我终于在iPhone上找到了体验最好的数独游戏
  7. 大数据_Hbase-(知识点回顾)---Hbase工作笔记0010
  8. HTML5有哪些新特性
  9. 力扣题目——217. 存在重复元素
  10. @spoj - lcs2@ Longest Common Substring II
  11. 系统架构师必须掌握的英语单词
  12. 很多次游戏的最后取胜实际上都有很强的偶然性
  13. DB2活动日志满的原因、分析、处理与避免
  14. 微信扫码下载app的前端界面代码
  15. 【云速建站】微信公众平台中维护IP白名单
  16. 李林计算机学院广西大学,李茹-广西大学·生命科学与技术学院
  17. 京东数科智能巡检机器人亮相中国数据中心设施论坛大会
  18. 猪猪的机器学习(十九)卷积神经网络
  19. python实现二维码识别软件_OpenCV和Zbar两个Python模块实现二维码和条形码识别
  20. PBA认证有可能像PMP一样流行吗?

热门文章

  1. Ebay一些数据分析
  2. HDU1276:士兵队列训练问题
  3. Python 插入latex符号,比如45°,45度
  4. VS Code 1.32 发布,想说 1.32.1 正在路上?没门!
  5. 中职计算机高考提分技巧,2018年高考《各科目》提分技巧全攻略
  6. instagram架构分析_转
  7. 新生儿超声计算机图文报告是检查什么,超声计算机图文报告是什么
  8. Gap year 资料整理
  9. 百度AI审核图片报download image error
  10. 本周游戏一点想法:模拟真实格斗