如何在Visual Studio中配置pthread多线程库

  最近在研究c/c++下的多线程,怎奈vs2017并没有自带pthread库,网络上很多教程说得不是很明确,又或者是其版本太低…总之问题重重,笔者对网上诸多教程进行了总结:pthread库下载地址:ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
  下载完后打开Pre-built.2文件夹,我们本次需要配置的文件都在这个文件夹中

1.将pthread的lib库放到VS对应的lib中

  VS库的目录可以在项目->属性->VC++目录->库目录中查看:如何在Visual Studio中配置pthread多线程库_第1张图片
  上图“计算的值”就是lib的目录,但这两个文件夹并不是一个x64,一个x86,它是根据你选择的平台(x64或x86)来进行计算的,将pthread的库放到第一个文件夹下,返回上级就可以看到另一个平台的库文件夹

2.将dll库放入Windows系统库文件中

  将dll\x64下的文件放到C:\Windows\System32\下,再将x86文件夹放到SysWOW64\下
  是的!你没看错!把x86放到x64,x64放到x86下!也不是笔者写错,至于为什么——鬼知道

3修改pthread.h文件

   做完上面这些如果直接将pthread.h放到vs的include目录下的话,还是有可能出错:
1.“timespec”:“struct”类型重定义
   找到

#if !defined( PTHREAD_H )
	#define PTHREAD_H

  其实就在pthread.h文件开头部分…
  在后面加上

#define HAVE_STRUCT_TIMESPEC

2.无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用:
  在pthread.h文件任意位置加上:

#pragma comment(lib,"pthreadVC2.lib")

  如果打开失败,参照以下方法加上文件路径

#ifdef _WIN64
	#pragma comment(lib,"x64的文件路径/pthreadVC2.lib")
#elif _WIN32
	#pragma comment(lib,"x86的文件路径/pthreadVC2.lib")
#endif//x86与x64的lib库的文件路径参照上文

  如果发生pthread.h无法修改的情况,可以用管理员权限打开进行修改,找不到管理员权限在哪,你可以把它复制到其他文件夹(比如桌面)进行修改,再复制回来
  当然,你要是不想修改pthread.h也可以将上述两段代码放到自己编写的程序中(其他很多博主也是这样做的),比如在编写stdafx.h时加入:

#pragma comment(lib,"pthreadVC2.lib")
#define HAVE_STRUCT_TIMESPEC

  只是这样做的每一次打开新的项目都得再写一遍——麻烦。
  如有任何问题,请于下方留言。

测试程序:

  链接:https://pan.baidu.com/s/1tyBbPBW7uahMR4QCtRXJDg 提取码:fym5

你可能感兴趣的:(原创,pthread,C/C++)