在Visual Studio 2015下使用pthread win32编译报错
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编译报错相关推荐
- Visual Studio 2013 突然不高亮,编译报错
同事的电脑,估计是windows更新失败的原因,C盘容量减小到不到1G,VS的高亮也坏了,重启后硬盘容量增加了但是仍然不高亮. 解决办法记录一下: 重置下. 开始菜单 -->所有程序--> ...
- Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...)
Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...) 目录 Android Studio 的一些 常用操作和 编译报错 整理(持续更新中...) 一.Android s ...
- Microsoft visual Studio 2015 下的俄罗斯方块源程序以及修改过程
项目名称:俄罗斯方块 项目语言:C++ 项目软件: Microsoft visual Studio 2015 错误1 错误提要:错误使用标识符 错误定位: clrscr() 错误提示: 未定义标识符& ...
- ubuntu下SFML小游戏编译报错
SFML CMakeLists SFML库的安装 编译报错 SFML库的安装 sudo apt-get sudo apt-get install libsfml-dev ubuntu会将库文件安装到/ ...
- qt在visual studio 2015下的使用
创建工程: 打开visual studio,按上一篇文章的方式创建新工程QtGuiApplication1,默认我们可以看到里面会出现QtGuiApplication1这个类是继承于QMainWind ...
- 关于Ubuntu18版本下新安装Qtcreator编译报错:cannot run compiler clang++ output的解决办法
第三次入坑 前两次本以为记住了,结果第三次再次在Linux下安装qtcreator依然捣鼓搞了半天,才决定将这些步骤记下来,<\笑哭> 1.在你安装好qtcreator之后,新建有一个qt ...
- QT vs下x64编译变win32编译报错:C:\Users\ycy\AppData\Local\QtMsBuild\qtrcc.targets(69,5): error MSB3073:
- 关于arm-none-linux-gnueabi-4.4.3编译环境下,lib1funs.S编译报错的处理
原始报错信息: Krj@VM:~/soc_workspace/1stQuarter_BarBoard/15_NandFlash/NandFlash_codeTest$ make cleanDepend ...
- 在Visual Studio 2015中使用Grunt、Bowe
基于Visual Studio 2015,你可以: 方便的管理前端包,如jQuery, Bootstrap, 或Angular. 自动运行任务,如LESS.JavaScript压缩.JSLint.Ja ...
最新文章
- hdu 5265(二分+枚举)
- [视频]怎样提升asp.net mvc 软件的性能 - 微软免费视频Improving ASP.NET MVC Application Performance...
- socket 编程入门教程(三)TCP原理:5、TCP的三次握手(three-way handshake)
- 同步降压DC-DC转换IC——XC9264
- 给python小白的几个小练习(附答案详解哦)
- mfc做数独游戏_我终于在iPhone上找到了体验最好的数独游戏
- 大数据_Hbase-(知识点回顾)---Hbase工作笔记0010
- HTML5有哪些新特性
- 力扣题目——217. 存在重复元素
- @spoj - lcs2@ Longest Common Substring II
- 系统架构师必须掌握的英语单词
- 很多次游戏的最后取胜实际上都有很强的偶然性
- DB2活动日志满的原因、分析、处理与避免
- 微信扫码下载app的前端界面代码
- 【云速建站】微信公众平台中维护IP白名单
- 李林计算机学院广西大学,李茹-广西大学·生命科学与技术学院
- 京东数科智能巡检机器人亮相中国数据中心设施论坛大会
- 猪猪的机器学习(十九)卷积神经网络
- python实现二维码识别软件_OpenCV和Zbar两个Python模块实现二维码和条形码识别
- PBA认证有可能像PMP一样流行吗?