【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )

250 篇文章 166 订阅



POSIX 线程局限性


1. POSIX 线程局限性 : 在 Android , Linux , UNIX , MAC 中可以直接使用 POSIX , Windows 不可以直接使用 ;

2. Windows 配置 POSIX 线程 : 在 Visual Studio 上使用 POSIX 线程 , 需要引入第三方动态库 ;



POSIX 线程配置文件下载及目录说明


1. 下载 : POSIX 线程 Windows 配置文件下载地址 :

  • ① 下载地址 1 : ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip ;
  • ② 下载地址 2 : https://jaist.dl.sourceforge.net/project/pthreads4w/pthreads-w32-2-9-1-release.zip ( 推荐 ) ;

2. Pre-built.2 目录下的相关文件说明 :

在这里插入图片描述

  • ① dll 目录 : 存放动态库目录 , 其中包含 64位 和 32位 两种动态库 ;

在这里插入图片描述
下图是 64 位动态库 :
在这里插入图片描述

下图是 32 位 动态库 :

在这里插入图片描述

  • ② lib 目录 ; 存放静态库的目录 , 该目录也是同时包含 64 位 与 32 位 静态库 ;

在这里插入图片描述

  • ③ include 目录 : 存放头文件的目录 ;
    在这里插入图片描述


Windows 动态库与静态库


动态库与静态库文件说明 :

  • ① dll 动态库文件说明 : 在 Pre-built.2\dll\x64 目录下 , 是 64 位操作系统的动态库文件 , Windows 上的动态库是 .dll 文件 , 在 Android , Linux 上的动态库是 .so 文件 ;
  • ② lib 静态库文件说明 : 在 Windows 上静态库有两种 , 一种只是单纯的起到引导作用 , 引导如何去链接 dll 动态库 ; 另一种是直接定义了所有的静态函数 ;


POSIX 线程配置 ( 项目配置 )


1. 拷贝文件 : 将 Pre-built.2 目录下的 include 和 lib 两个目录拷贝到 CMakeLists.txt 所在目录中 ;

在这里插入图片描述

2. CMake 配置 引入头文件 :

#引入头文件
include_directories("include")

3. CMake 配置 静态库 : 用于引导如何链接动态库和静态库 , 这里配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录 ;

#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
    set(platform x64)
else()
    set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")

4. CMake 配置链接库 : 链接生成的 005_Thread 和线程动态库 , 线程动态库是 lib/x64 下的 pthreadVC2.lib ;

#链接生成的 005_Thread 和线程动态库名字  
#	动态库是 lib/x64 下的 pthreadVC2.lib 
target_link_libraries(005_Thread pthreadVC2)
  • 5. CMakeLists.txt 配置宏定义 : 在编译时会出现 " “timespec”:“struct” 类型重定义 " 报错信息 , 需要配置宏定义信息 ;
#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")

6. 完整的 CMakeLists.txt 配置 :

# CMakeList.txt: 005_Thread 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

#引入头文件
include_directories("include")



#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
    set(platform x64)
else()
    set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")

#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")

# 将源代码添加到此项目的可执行文件。
add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")

#链接生成的 005_Thread 和线程动态库名字  
#	动态库是 lib/x64 下的 pthreadVC2.lib 
target_link_libraries(005_Thread  pthreadVC2)

# TODO: 如有需要,请添加测试并安装目标。

上面的内容是项目配置内容, 下面是 Windows 系统配置内容 ;



POSIX 线程配置 ( Windows 动态库拷贝 | 注意 32 位库拷贝到 SysWOW64 目录 | 64 位库拷贝到 System32 目录 )


拷贝 .dll 动态库到 Windows 系统中 , 如果 Windows 系统中没有对应的动态库 , 运行时会报错 ;

1. 64 位的 .dll 动态库 : 将 Pre-built.2\dll\x64 目录下的两个 64 位 .dll 动态库 ( pthreadGC2.dll 和 pthreadVC2.dll ) 拷贝到 C:\Windows\System32 目录中 ;

  • ① Pre-built.2\dll\x64 下的 动态库 :
    在这里插入图片描述
  • ② 拷贝到 C:\Windows\System32后的动态库 :

在这里插入图片描述

2. 32 位的 .dll 动态库 : 将 Pre-built.2\dll\x86 目录下的 5 个 32 位 .dll 动态库 ( pthreadGC2.dll , pthreadGCE2.dll , pthreadVC2.dll , pthreadVCE2.dll , pthreadVSE2.dll ) 拷贝到 C:\Windows\SysWOW64 目录中 ;

  • ① 32 位 .dll 动态库 :

在这里插入图片描述

  • ② 拷贝 32 位 动态库 : 将 32 位动态库拷贝到 C:\Windows\SysWOW64 目录下 ;

在这里插入图片描述



配置代码测试


线程使用代码 :

// 005_Thread.cpp: 定义应用程序的入口点。
//

#include "005_Thread.h"
#include <pthread.h>

using namespace std;

int main()
{
	cout << "Hello CMake。" << endl;

	//测试 POSIX 线程方法
	pthread_self();

	return 0;
}

CMake 配置文件 :

# CMakeList.txt: 005_Thread 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

#引入头文件
include_directories("include")



#配置自动根据当前是 32 位还是 64 位程序 , 确定静态库的配置目录
if(CMAKE_CL_64)
    set(platform x64)
else()
    set(platform x86)
endif()
#配置静态库 , 用于引导如何链接动态库和静态库
link_directories("lib/${platform}")

#处理 “timespec”:“struct” 类型重定义 报错信息
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DHAVE_STRUCT_TIMESPEC")

# 将源代码添加到此项目的可执行文件。
add_executable (005_Thread "005_Thread.cpp" "005_Thread.h")

#链接生成的 005_Thread 和线程动态库名字  
#	动态库是 lib/x64 下的 pthreadVC2.lib 
target_link_libraries(005_Thread  pthreadVC2)

# TODO: 如有需要,请添加测试并安装目标。

运行结果 :

在这里插入图片描述

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值