前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )

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

作者头像
韩曙亮
发布2023-03-27 16:57:06
1.1K0
发布2023-03-27 16:57:06
举报

文章目录

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 配置 引入头文件 :

代码语言:javascript
复制
#引入头文件
include_directories("include")

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

代码语言:javascript
复制
#配置自动根据当前是 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 ;

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

6. 完整的 CMakeLists.txt 配置 :

代码语言:javascript
复制
# 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 目录下 ;
在这里插入图片描述
在这里插入图片描述
配置代码测试

线程使用代码 :

代码语言:javascript
复制
// 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 配置文件 :

代码语言:javascript
复制
# 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: 如有需要,请添加测试并安装目标。

运行结果 :

在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • POSIX 线程局限性
      • POSIX 线程配置文件下载及目录说明
        • Windows 动态库与静态库
          • POSIX 线程配置 ( 项目配置 )
            • POSIX 线程配置 ( Windows 动态库拷贝 | 注意 32 位库拷贝到 SysWOW64 目录 | 64 位库拷贝到 System32 目录 )
              • 配置代码测试
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档