【转载】window下配置pthread的方法及出现问题的解决方法

POSIX线程(POSIX threads),简称Pthreads,是线程的POSIX标准。该标准定义了创建和操纵线程的一整套API。在类Unix操作系统(Unix、Linux、Mac OS X等)中,都使用Pthreads作为操作系统的线程。Windows操作系统也有其移植版pthreads-win32。

转载连接:https://blog.csdn.net/cry1994/article/details/79115394

下载源码

源码主页:https://sourceware.org/pthreads-win32/
ftp地址:ftp://sourceware.org/pub/pthreads-win32

下载最新版本pthreads-w32-2-9-1-release.zip解压得到三个文件夹

Pre-built.2

Pre-build.2 里面包含了pthreads for win32 的头文件和库文件;

pthreads.2

pthreads.2 里面包含了pthreads 的源代码;

QueueUserAPCEx

QueueUserAPCEx 里面是一个alert的driver,编译需要DDK 。Windows Device Driver Kit (NTDDK.h) 需要额外单独安装。

直接使用or编译源码

1.直接使用

Pre-built.2这个文件夹下有三个文件夹
dll 动态链接库
include头文件
lib 静态链接库

1.1配置头文件

把include文件夹下的头文件拷贝到vs2017安装目录下

D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.11.25503include

1.2配置静态链接库

把lib文件夹下的静态库文件拷贝到vs2017安装目录下

D:Program Files (x86)Microsoft Visual Studio2017ProfessionalVCToolsMSVC14.11.25503lib

1.3配置动态链接库

Pre-built.2dllx86下的文件拷贝到C:WindowsSysWOW64目录下
Pre-built.2dllx64下的文件拷贝到C:WindowsSystem32目录下

测试

#include <pthread.h>
#pragma comment(lib,"pthreadVC2.lib")
int main()
{
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

编译错误C2011 “timespec”:“struct”类型重定义

可修改pthread.h文件,在
#if !defined( PTHREAD_H )
#define PTHREAD_H
下面加上一行宏定义
#define HAVE_STRUCT_TIMESPEC
可以解决“timespec”:“struct”类型重定义错误
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

至此,已经可以在VS2017中使用。如果不想改动到VS2017的目录和系统目录,可以通过配置工程项目属性,设置附加包含目录/链接器附加依赖库等选项,从而达到使用pthread库的目的。

2.编译pthread源码

暂时懒得研究。就酱,用着先。

原文地址:https://www.cnblogs.com/bookdrip/p/10149370.html