在 Win7 的 MinGW 中使用 pthread
Posted
技术标签:
【中文标题】在 Win7 的 MinGW 中使用 pthread【英文标题】:Use pthreads in MinGW in Win7 【发布时间】:2015-01-20 02:11:50 【问题描述】:2015-1-20,我在 Win7 中使用 MinGW,尝试使用 MinGW 和 Pthreads 编译我的源代码。 MinGW 已经支持 POSIX 线程,在“MinGW 安装管理器”中,我们可以安装 pthreads dev 包和 pthreads lib。 但是我自己编译源码的时候,出现了一个错误:struct timespec redefinition,先在pthread.h,然后在unistd.h,不知道为什么。
在此之前,实际上我安装了没有 pthreads dev 和 lib 包的 minGW,我下载了 pthreads-for-win32 源代码并在本地构建它。我使用 -I/somewhere -L/somewhere -lpthreadGC2 链接到我的源代码,并且它有效。
但这一次,MinGW 的自封装失败了。我需要帮助。 我无法上传图片向您展示详细信息....
【问题讨论】:
【参考方案1】:其实我找到了解决办法。
不要在“pthread.h”之后包含“unistd.h”,而是使用本地winapi。
在 Linux 中使用 gcc 编写“pthreads”很容易,但在 Win7 中不支持,请使用“MinGW 安装管理器”(谷歌“mingw”并下载)进行安装。 安装mingw时选择“MinGW标准库”中的“mingw32-pthreads-win32”开发包,则无需下载pthreads-for-win32源代码或在本地构建。但是“pthread.h”会和“unistd.h”冲突,在Windows中,我们应该使用Windows API而不是unix API。
【讨论】:
在编译调用 C 代码的 python 脚本时遇到类似问题:$ python setup.py install make: Entering directory/c/vw-master/vw-c' gcc vw.c -o ../bin/vw -lm -pthread -O3 -Wall -march=native -funroll- loops -Wno-unused-result vw.c:19:21: fatal error: pthread.h: No such file or directory compilation terminated. make: *** [vw] Error 1 make: Leaving directory
/c/vw-master/vw-c' 你对 PATH 做了任何更改吗还是别的什么?
“我们应该使用 Windows API 而不是 unix API”是什么意思,你能举个例子吗...?
感谢您的回答,我最终解决了这个问题。
这个包现在叫做“mingw-w64-winpthreads-git”:packages.msys2.org/package/mingw-w64-x86_64-winpthreads-git以上是关于在 Win7 的 MinGW 中使用 pthread的主要内容,如果未能解决你的问题,请参考以下文章
帮助在 Win7-64 上通过 mingw32 或 mingw-64 安装 ECL (Embeddable Common Lisp)